从矢量列表中找到最近的矢量|蟒蛇

时间:2015-09-07 22:19:03

标签: python vector distance

如果给出一个10个向量的列表,称为A代表不同的组。然后你有一个时间序列的向量v1,v2,...,vn,每个也是一个向量。我想知道是否有办法在A中为每个v1,v2,...,vn找到“最接近”的矢量,如果你定义了一些距离度量?

除了循环并只是比较所有条目之外,还有一种快速的方法吗?

编辑:不,我不会问如何做k-means或类似的东西。

2 个答案:

答案 0 :(得分:16)

您可以使用spatial KDtree in scipy。它使用快速树算法来识别任意维度的矢量的近点。

编辑:抱歉,如果您正在寻找arbitrary distance metrics,树状结构可能仍然是一个选项。

以下是一个例子:

>>> from scipy import spatial
>>> A = [[0,1,2,3,4], [4,3,2,1,0], [2,5,3,7,1], [1,0,1,0,1]]
>>> tree = spatial.KDTree(A)

这将KDTree设置为A中的所有点,允许您在其中执行快速空间搜索。 这样的查询采用向量并返回A中最近的邻居:

>>> tree.query([0.5,0.5,0.5,0.5,0.5])
(1.1180339887498949, 3)

第一个返回值是最近邻居的距离,第二个返回值是A在A中的位置,这样你就可以得到它,例如:

>>> A[ tree.query([0.5,0.5,0.5,0.5,0.5])[1] ]
[1, 0, 1, 0, 1]

答案 1 :(得分:1)

如果您定义了一个指标,则可以在min函数中使用它:

closest = min(A, key=distance)