![](/img/trans.png)
[英]How to calculate the euclidean distance between two matrices using only matrix operations in numpy python (no for loops)?
[英]python numpy euclidean distance calculation between matrices of row vectors
我是Numpy的新手,我想問你如何計算矢量中存儲的點之間的歐氏距離。
讓我們假設我們有一個numpy.array,每一行都是一個向量和一個numpy.array。 我想知道是否可以計算所有點和這個單點之間的歐氏距離並將它們存儲在一個numpy.array中。
這是一個界面:
points #2d list of row-vectors
singlePoint #one row-vector
listOfDistances= procedure( points,singlePoint)
我們可以有這樣的東西嗎? 或者是否可以讓一個命令將單個點作為其他點的列表,最后我們得到一個距離矩陣?
謝謝
雖然你可以使用矢量化,但是對於numpy數組,@ Karl的方法會相當慢。
更簡單的方法是只做np.hypot(*(points - single_point).T)
。 (轉置假定點是Nx2數組,而不是2xN。如果它是2xN,則不需要.T
。
但是這有點難以理解,所以你要更明確地寫出來(使用一些固定的示例數據......):
import numpy as np
single_point = [3, 4]
points = np.arange(20).reshape((10,2))
dist = (points - single_point)**2
dist = np.sum(dist, axis=1)
dist = np.sqrt(dist)
為了獲得距離,你可以在numpy中使用linalg模塊的norm方法:
np.linalg.norm(x - y)
import numpy as np
def distance(v1, v2):
return np.sqrt(np.sum((v1 - v2) ** 2))
要將函數應用於numpy數組的每個元素,請嘗試numpy.vectorize 。
為了進行實際計算,我們需要兩個向量中坐標對之間差異平方和的平方根(哇!)。
我們可以用zip
配對的坐標,並sum
了理解,總結的結果。 看起來像:
sum((x - y) ** 2 for (x, y) in zip(singlePoint, pointFromArray)) ** 0.5
import numpy as np
single_point = [3, 4]
points = np.arange(20).reshape((10,2))
distance = euclid_dist(single_point,points)
def euclid_dist(t1, t2):
return np.sqrt(((t1-t2)**2).sum(axis = 1))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.