【发布时间】:2014-07-07 03:10:31
【问题描述】:
我有两个列表,每个列表都包含一组有序的数字。
一个列表很小(~ 5 - 20 个元素),另一个列表很大(~ 5000)。这些列表具有不同的“比例”,并且可能在一个或另一个列表中缺少点。一般来说,大多数元素都会在两个列表中。
我正在寻找一种方法来检测两个列表之间的位置和“缩放”,以使两个列表之间的距离最小。
一个例子是:
l1 = [ 100., 200., 400.]
l2 = [ 350., 1000., 2003., 3996., 7500., 23000.]
比例为 10。l1 在 l2 中的位置为 1。
列表 10.*l1 出现在 l2 内的位置 1;列表的距离为 7(这取决于我选择的指标,这里我只是总结了所有元素之间的差异)。
我想知道是否已经有方法,例如在我可以使用的模式识别中(最好在python中)。在我看来,在将模式与未知比例因子进行比较时,这可能是一个常见问题。但我找不到能描述我的问题的好关键字。
其应用是通过将测量的光谱线与已知线的位置目录进行比较来识别测量的光谱线,从而将非物理单位“探测器上的像素”转换为实际波长。
原则上我已经可以对两个列表的比例因子提供一个不错的猜测,但我想这不是必需的,因为在大多数情况下解决方案应该是唯一的。
感谢任何帮助,
朱利安
【问题讨论】:
-
我相信可能适用于您的问题的关键字是
regression和/或fitting。我几乎可以肯定这可以使用 NumPy 完成,可能使用numpy.linalg.lstsq或numpy.polyfit。然而,这根本不是我的专业领域,所以我希望 NumPy / SciPy 的一些人可以留下一个有根据的答案。 -
我不认为我可以使用简单的回归算法,因为两个列表之间的距离不是尺度的连续函数。根据规模,第二个列表中的“下一个邻居”元素会发生变化。
标签: python pattern-recognition list-comparison