假设我有一组点
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.spatial.distance.cdist。我不确定,但我认为scipy对此进行了大量优化。如果两个输入都使用pts数组,我假设得到一个对角线上有零的M x M数组。功能
相关问题 更多 >
编程相关推荐