如何仅用numpy基于坐标ndarray生成成对距离矩阵
实现方法
你可以通过以下两种常用方案实现距离矩阵计算:
方案1:基于scipy的高效实现
scipy.spatial.distance.cdist是专门用于计算两组点两两距离的接口,性能优化较好,代码如下:
from scipy.spatial.distance import cdist # 计算所有点两两之间的欧氏距离 dist_matrix = cdist(point_coords, point_coords, metric='euclidean')
最终得到的dist_matrix是形状为(40,40)的正方形矩阵,dist_matrix[i][j]对应第i个点和第j个点的欧氏距离,矩阵对角线值全为0,且整体为对称矩阵。
方案2:纯NumPy无额外依赖实现
如果不想引入scipy依赖,可直接用NumPy的广播机制手动计算:
# 利用广播计算所有点对在x、y维度的差值 coord_diff = point_coords[:, np.newaxis] - point_coords # 差值平方求和后开根号得到欧氏距离 dist_matrix = np.sqrt(np.sum(coord_diff ** 2, axis=2))
计算结果和方案1完全一致。
内容的提问来源于stack exchange,提问作者wowonline
相关产品推荐
相关产品推荐

