【发布时间】:2017-09-08 02:01:53
【问题描述】:
我有一个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 方式来执行此操作?
【问题讨论】:
-
这些点的尺寸是任意的,还是总是4d?
-
你看了吗:
distance.pdist?这应该解决它:distance.pdist(a)。最终的输出应该是什么样的? -
@Divakar 在所有行向量对之间的欧几里得距离中我想要k个最远的向量。
-
@divakar 先生,成功了
-
另外,看看 KDTree - docs.scipy.org/doc/scipy-0.14.0/reference/generated/…
标签: python numpy euclidean-distance