2015-06-12 95 views
3

我已經在Python以下問題,我需要解決:如何找到兩個座標矩陣之間最接近的相應向量?

給定兩個座標的矩陣(NumPy的ndarrays)AB,找到所有座標向量aA對應座標矢量bB,使得歐幾里德距離||a-b||已被最小化。座標矩陣AB可以具有不同數量的座標向量(也就是不同的行數)。

此方法應返回座標矢量C的矩陣,其中在C的第i個矢量c是從B最小化座標與第i的歐幾里德距離矢量aA載體中。

例如,讓我們說

A = np.array([[1,1], [3,4]])B = np.array([[1,2], [3,6], [8,1]])

矢量[1,1]之間在A和歐幾里得距離在B載體是:

1, 5.385165, 7 

所以在C第一向量將be [1,2]

同樣在A爲載體[3,4]的距離,並在B載體是:

2.828427, 2, 5.830952 

所以在C第二和最後一個載體可以[3,6]

所以C = [[1,2], [3,6]]

如何實現代碼在Python中有效嗎?

回答

4

你可以使用cdistscipy.spatial.distance有效地得到歐氏距離,然後用np.argmin獲得對應於最小值的指數,並利用這些來索引B的最終輸出。這裏的執行 -

import numpy as np 
from scipy.spatial.distance import cdist 

C = B[np.argmin(cdist(A,B),1)] 

採樣運行 -

In [99]: A 
Out[99]: 
array([[1, 1], 
     [3, 4]]) 

In [100]: B 
Out[100]: 
array([[1, 2], 
     [3, 6], 
     [8, 1]]) 

In [101]: B[np.argmin(cdist(A,B),1)] 
Out[101]: 
array([[1, 2], 
     [3, 6]]) 
+0

非常好,謝謝! =)我正在做計算繁重的計算,所以這就是爲什麼效率在我的問題中很重要:) – jjepsuomi

相關問題