【问题标题】:Find sublist in list with different scaling / fuzzy pattern recognition在具有不同缩放/模糊模式识别的列表中查找子列表
【发布时间】: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.lstsqnumpy.polyfit。然而,这根本不是我的专业领域,所以我希望 NumPy / SciPy 的一些人可以留下一个有根据的答案。
  • 我不认为我可以使用简单的回归算法,因为两个列表之间的距离不是尺度的连续函数。根据规模,第二个列表中的“下一个邻居”元素会发生变化。

标签: python pattern-recognition list-comparison


【解决方案1】:

您要解决的问题是两度优化。第一个是比例,第二个是索引。您的问题的广义上通常很难有效地解决。然而,有一些事情可以简化计算。首先两个集合都排序了吗?其次,您是否要从第二个列表中寻找与第一个匹配的连续集?为了进一步解释,我将使用一个示例:1、2、3 和 2、3、4、6。 2(跳过第二个列表中的 3)或 1.something(不跳过 3)的比例更好?第三,你想用什么权重来衡量两者之间的差异(线性和、均方根等)?

如果您能提供其中的一些详细信息,我或许可以让您更好地了解一些可以尝试的方法。

更新

因此,根据您的评论,您可以跳过值。这实际上使这个问题很难解决 O(2^n)。因为您基本上是在查看列表一和列表二的所有组合。

即使你可以优化这个问题的某些方面,因为它们是排序的,你仍然需要检查很多组合。

【讨论】:

  • 两组均已排序。关于您的示例:比例 2 将优于 1.x,因为 1、2、3 将与 2、4、6 完全匹配。其实我不确定权重。我认为 rms 可能是一个很好的指标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2019-11-29
相关资源
最近更新 更多