如果給出一個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