2013-07-30 16 views
3

我有2D的兩個陣列的座標點(X,Y)在numpy的,找到每一對之間的歐幾里德距離的兩個陣列

a = [ (x1,y1), (x2,y2), ... (xN,yN) ] 
b = [ (X1,Y1), (X2,Y2), ... (XN,YN) ] 

如何找到在1xN每個比對(xi,yi) to (Xi,Yi)之間的歐幾里德距離陣列?

scipy.spatial.cdist功能讓我在NxN陣列中的所有對之間的距離。

如果我只是用norm功能通過一個計算距離一個似乎是緩慢的。

有沒有內置函數來做到這一點?

回答

10

,我沒有看到一個內置的,但你可以很輕鬆地做自己。

distances = (a-b)**2 
distances = distances.sum(axis=-1) 
distances = np.sqrt(distances) 
+1

它相當於是相同的,但它是更快地做平方,並用'np.dot'補充說:'增量= A-B; dist = np.dot(delta,delta); dist = np.sqrt(dist)' – Jaime

+0

我不認爲'dot'就像那樣;它計算用於2-d輸入的矩陣產品。你可能可以用'einsum'做一些事情,但我不知道愛因斯坦求和慣例,所以我很難用它來給出答案。 – user2357112

+2

哎呀!你是絕對正確的,它是'inner1d':'import numpy.core.umath_tests as ut; delta = a-b; dist = np.sqrt(dnp.inner1d(delta,delta))'。或者'dist = np.sqrt(np.einsum('ij,ij-> i',delta,delta))'。 – Jaime

相關問題