Python中直接计算两个三维点集所有点对欧氏距离的方法
完全可以不用嵌套循环实现,两种常用的高效实现方式如下:
方法1:使用scipy自带的cdist(推荐)
scipy.spatial.distance模块已经封装了专门计算两个点集两两距离的cdist方法,直接调用即可:
import numpy as np from scipy.spatial.distance import cdist # 直接计算距离矩阵 dist_matrix = cdist(set_1, set_2, metric="euclidean")
返回的dist_matrix是形状为(len(set_1), len(set_2))的二维数组,第i行第j个元素对应set_1[i]到set_2[j]的欧氏距离,和你嵌套循环得到的结果完全一致,底层为矢量化运算,性能远高于Python层的循环。
方法2:仅用numpy广播实现
如果不想依赖scipy,也可以直接用numpy的广播机制实现:
dist_matrix = np.sqrt(np.sum((set_1[:, np.newaxis] - set_2) ** 2, axis=2))
这个实现的输出和cdist结果完全相同,仅依赖numpy即可运行。
内容的提问来源于stack exchange,提问作者PabloG
相关产品推荐
相关产品推荐

