Skip to main content
 首页 » 编程设计

python之计算numpy中2个点列表的距离

2025年05月04日20开发

我有 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)的解决方案,因为它们可能因浮点舍入误差而在数值上不稳定。