我有一个给定的值列表和列表集合(列表A
,B
和C
)具有相似的值。我试图找到一种方法来返回最接近given
列表的列表。我想使用最小二乘拟合作为距离度量。因此,在这种情况下Python:按值查找与输入列表值最匹配的列表
given = [0, 1, 2, 3, 4, 5]
A = [0.1, 0.9, 2, 3.3, 3.6, 5.1]
B = [-0.1, 0.9, 2.1, 3.1, 3.9, 5]
C = [0, 1.1, 2, 2.9, 4, 5.1]
,这将是最接近的配对返回C
到given
。
我想我可以纳入类似:
match = [min([val[idx] for val in [A,B,C]], key=lambda x: abs(x-given[idx])) for idx in range(len(given))]
但是,只返回每个列表元素最接近的值。我不确定如何确定列表C为最接近的逐点匹配。另外,如果列表的长度不同,我真的不知道该怎么做,如果我不按索引比较它们。例如:
given = [0, 1, 2, 3, 4, 5]
A = [0.1, 0.9, 2, 3.3, 3.6, 2, 5.1, 3, 6.8, 7.1, 8.2, 9]
B = [-0.1, 0.9, 2.1, 3.1, 3.9]
C = [-1.7, -1, 0, 1.1, 2, 2.9, 4, 5.1, 6, 7.1, 8]
仍然会返回C
是最接近的配对。
我也使用Numpy,但没有发现任何有用的东西。任何帮助将不胜感激!
我认为你应该从形式化所需的距离度量开始。换句话说,它究竟是什么*使得'given'接近'C'而不是'A'或'B'?没有这个,这个问题太模糊,无法回答。 – NPE
在SO上看到这个问题:http://stackoverflow.com/questions/9365184/computing-similarity-between-two-lists – syrion
@NPE是正确的。我同意,应该选择一些距离度量。 – crow16384