使用 scipy 的 `cdist` 函数可高效、向量化地计算任意坐标点集的两两欧氏距离矩阵,避免显式循环,适用于中大规模数据。
在科学计算和机器学习中,经常需要基于一组二维(或高维)坐标点构建完整的成对距离矩阵(例如用于聚类、图构建或相似性分析)。手动嵌套循环不仅代码冗长,且性能低下;而借助 NumPy 生态中的成熟工具,可在一行核心调用中完*矩阵计算。
推荐使用 scipy.spatial.distance.cdist —— 它专为向量化计算两个点集之间的距离而设计。当传入相同的坐标数组作为 XA 和 XB 参数时,即可得到对称的距离矩阵:
from scipy.spatial.distance import cdist import numpy as np l_coords = [(1, 2), (1.1, 2.2), (1.05, 1.9)] coords = np.array(l_coords) # 转为 ndarray(cdist 内部自动处理,但显式转换更清晰) distance_matrix = cdist(coords, coords, metric='euclidean') print(distance_matrix)
输出:
[[0. 0.2236068 0.1118034 ] [0.2236068 0. 0.30413813] [0.1118034 0.30413813 0. ]]
✅ 优势说明:
⚠️ 注意事项:
综上,scipy.spatial.distance.cdist 是计算坐标距离矩阵最实用、高效且可扩展的标准方案。