如果给出一个10个向量的列表,称为A,表示不同的组。然后你有一个时间序列的向量v1,v2,...,vn,每个向量也是一个向量。如果你定义了一些距离度量,我想知道是否有一种方法可以在A中为每个v1,v2,...,vn找到“最接近”的矢量?从矢量列表中查找最接近的矢量| Python
有没有一种快速的方法来做到这一点,除了循环和只是比较所有条目?
编辑:不,我不是问如何做k-means或类似的东西。
如果给出一个10个向量的列表,称为A,表示不同的组。然后你有一个时间序列的向量v1,v2,...,vn,每个向量也是一个向量。如果你定义了一些距离度量,我想知道是否有一种方法可以在A中为每个v1,v2,...,vn找到“最接近”的矢量?从矢量列表中查找最接近的矢量| Python
有没有一种快速的方法来做到这一点,除了循环和只是比较所有条目?
编辑:不,我不是问如何做k-means或类似的东西。
可以使用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在一所有点,让您在其中执行快速搜索空间。 这种查询采用的载体,并返回一种用于它最接近的邻居:
>>> tree.query([0.5,0.5,0.5,0.5,0.5])
(1.1180339887498949, 3)
第一复位值是最接近的邻居的距离和在A中的第二其位置,使得可以获取它例子是这样的:
>>> A[ tree.query([0.5,0.5,0.5,0.5,0.5])[1] ]
[1, 0, 1, 0, 1]
所以一些示例代码是:
# build a KD-tree to compare to some array of vectors 'centall'
tree = scipy.spatial.KDTree(centall)
print 'shape of tree is ', tree.data.shape
# loop through different regions and identify any clusters that belong to a different region
[d1, i1] = tree.query(group1)
[d2, i2] = tree.query(group2)
这返回变量d和我。 d存储最近的距离 我返回发生这种情况的索引
希望这有助于。
可能的重复[如何使用Python对最近邻居算法分类数据?](http://stackoverflow.com/questions/7326958/how-can-i-classify-data-with-the-nearest -neighbor-algorithm-using-python) – Sneftel