通八洲科技

计算坐标列表的欧氏距离矩阵(NumPy向量化实现)

日期:2025-12-27 00:00 / 作者:心靈之曲

使用 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 是计算坐标距离矩阵最实用、高效且可扩展的标准方案。