如何用Numpy向量化表达式计算坐标列表的距离矩阵
用Numpy向量化计算坐标列表的距离矩阵
首先把坐标列表转换成Numpy数组,这是向量化操作的基础:
import numpy as np l_coords = [(1, 2), (1.1, 2.2), (1.05, 1.9)] coords = np.array(l_coords)
方法一:基于广播手动计算欧氏距离
利用Numpy的广播机制,直接计算所有点对的欧氏距离:
# 扩展维度实现广播,得到每个点与所有点的坐标差 diff = coords[:, np.newaxis] - coords # 计算差的平方和,再开根号得到距离矩阵 dist_matrix = np.sqrt(np.sum(diff ** 2, axis=-1))
方法二:用np.linalg.norm简化计算
Numpy的线性代数模块提供了范数计算函数,可以更简洁地实现:
dist_matrix = np.linalg.norm(coords[:, None] - coords, axis=-1)
两种方法得到的结果一致,输出的距离矩阵是对称矩阵,其中dist_matrix[i][j]表示第i个点到第j个点的欧氏距离。
内容的提问来源于stack exchange,提问作者David Masip
相关产品推荐
相关产品推荐

