我有2个点列表作为numpy.ndarray,每行是一个点的坐标,例如:

a = np.array([[1,0,0],[0,1,0],[0,0,1]])
b = np.array([[1,1,0],[0,1,1],[1,0,1]])


在这里,我想计算2个列表中所有对点之间的欧几里得距离,对于a中的每个点p_a,我想计算它与b中每个点p_b之间的距离。所以结果是

d = np.array([[1,sqrt(3),1],[1,1,sqrt(3)],[sqrt(3),1,1]])


如何在numpy中使用矩阵乘法来计算距离矩阵?

最佳答案

使用直接的numpy广播,您可以执行以下操作:

dist = np.sqrt(((a[:, None] - b[:, :, None]) ** 2).sum(0))


或者,scipy有一个例程,该例程会稍微提高效率(特别是对于大型矩阵)

from scipy.spatial.distance import cdist
dist = cdist(a, b)


我会避免依赖于分解矩阵乘积(形式为A ^ 2 + B ^ 2-2AB)的解决方案,因为由于浮点舍入误差,它们在数值上可能不稳定。

关于python - 计算numpy中2个点列表的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47877530/

10-12 19:39