我有一个numpy
数组,如:
import numpy as np
a = np.array([[1,0,1,0],
[1,1,0,0],
[1,0,1,0],
[0,0,1,1]])
我想计算每对行之间的euclidian distance
。
from scipy.spatial import distance
for i in range(0,a.shape[0]):
d = [np.sqrt(np.sum((a[i]-a[j])**2)) for j in range(i+1,a.shape[0])]
print(d)
[1.4142135623730951, 0.0, 1.4142135623730951]
[1.4142135623730951, 2.0]
[1.4142135623730951]
[]
既然我必须在一个巨大的numpy
数组上运行这段代码,有没有更好的pythonic方法可以做到这一点?
对于更“优雅”的东西,你可以使用scikitlearn对欧几里德距离:
具有与单个数组相同的输出。
我将
itertools.combinations
与差分向量的np.linalg.norm
一起使用(这是欧几里德距离):为了理解,请从docs:
combinations('ABCD', 2)
给出AB AC AD BC BD CD
。在你的例子中,A
,B
,C
和D
是矩阵的行a
,所以上面代码中出现的x[0]-x[1]
是a
行中向量的差分向量。而对于完整性,einsum经常被用于距离计算。
相关问题 更多 >
编程相关推荐