一种快速计算三维点阵间最小距离的方法
问题描述
我想知道是否有快速方法来计算3D数值数组(A [N,3]
)的所有点到第二个3D数值数组(B [M,3]
)的所有点之间的欧几里得距离。
然后我应该得到一个数组C
,它将是[N, M]
数组的点到数组的点B
的所有距离,然后使用np.min()
沿指定的轴获得从集合的点到集合的点B
的所有最小距离。
到目前为止,我就是这样实现的:
distances = np.repeat(9999, len(A))
for i, point in enumerate(A):
min_distance = np.min(np.sqrt(np.sum(np.square(point - B), axis=1)))
distances[i] = min_distance
有什么方法可以消除for循环...?
提前感谢:)
解决方案
import numpy as np
# arrays with xyz coordinates of all points
a = np.asarray([[xa1,ya1,za1],...,[xan,yan,zan]])
b = np.asarray([[xb1,yb1,zb1],...,[xbn,ybn,zbn]])
# reshaping to be able to calculate the distance matrix
a_reshaped = a.reshape(a.shape[0], 1, 3)
b_reshaped = b.reshape(1, b.shape[0], 3)
"""calculation of all distances between all points - creates a
len(a) x len(b) matrix"""
distance = np.sqrt(np.sum((a_reshaped - b_reshaped)**2, axis=2))
相关文章