python - 计算numpy中2个点列表的距离

标签 python numpy

我有 2 个点列表作为 numpy.ndarray,每一行都是一个点的坐标,例如:

a = np.array([[1,0,0],[0,1,0],[0,0,1]])
b = np.array([[1,1,0],[0,1,1],[1,0,1]])

这里我想计算2个列表中所有点对之间的欧氏距离,对于a中的每个点p_a,我想计算它与b中每个点p_b之间的距离。所以结果是

d = np.array([[1,sqrt(3),1],[1,1,sqrt(3)],[sqrt(3),1,1]])

如何在numpy中使用矩阵乘法来计算距离矩阵?

最佳答案

使用直接 numpy 广播,您可以执行以下操作:

dist = np.sqrt(((a[:, None] - b[:, :, None]) ** 2).sum(0))

或者,scipy 有一个例程,可以稍微更有效地计算此问题(特别是对于大型矩阵)

from scipy.spatial.distance import cdist
dist = cdist(a, b)

我会避免依赖于分解矩阵乘积(形式为 A^2 + B^2 - 2AB)的解决方案,因为它们可能由于浮点舍入误差而在数值上不稳定。

关于python - 计算numpy中2个点列表的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59733668/

相关文章:

python - 为什么我在赋值错误之前得到一个局部变量引用?

python - 元字符和反斜杠在这里做什么?

python - 使用matplotlib创建雷达图时,有没有办法删除雷达图上的圆圈 'labels'?

python - NumPy 数组元素的自定义排列

python - 在给定概率函数的情况下绘制贝叶斯决策边界的内置函数

c# - 如何将我的代码从 C# 转换为 Python?

python - 如何加速算法来查找时间重叠?

python - 如何在 numpy 数组中存储不同大小的数组列表(用于集群目的)?

Python: h5py 给出 OSError: Can't read data (inflate() failed) 即使它之前打开过

arrays - 从两个列表创建 numpy.recararray python