【发布时间】:2019-01-23 15:46:27
【问题描述】:
假设我有一个点数组,
import numpy as np
pts = np.random.rand(100,3) # 1000 points, X, Y, Z along second dimension
计算每个点组合之间距离的幼稚方法涉及双 for 循环,并且对于大量点来说会非常缓慢,
def euclidian_distance(p1, p2):
d = p2 - p1
return np.sqrt(d**2).sum()
out = np.empty((pts.shape[0], pts.shape[0]))
pts_swapped = pts.swapaxes(0,1)
for idx, point in enumerate(pts_swapped):
for idx2, point_inner in enumerate(pts_swapped):
out[idx,idx2] = euclidian_distance(point, point_inner)
如何向量化这个计算?
【问题讨论】:
-
看看scipy.cdist函数。我不确定,但我认为 scipy 对此进行了很多优化。如果你对两个输入都使用 pts 数组,我假设你会得到一个 M x M 数组,对角线上有零。
-
谢谢!如果您将此作为答案提交,我可以将其标记为已接受。