首页 > 解决方案 > 如何计算python中数组元素的距离?

问题描述

我有一个 numpy 数组,其中每个元素都是一个位置,如下所示:

array([[1, 1, 0. ],
       [2 , 2, 0. ],
       [3 , 3, 1 ]])

我想计算每个元素之间的距离。所以在这里,预期的输出是:

[0, 1.414213, 1.732050]

距离计算如下:对于第一个元素,它是 0,因为之前没有任何元素。对于第二个sqrt((2 - 1)**2 + (2 - 1)**2 + (0 - 0)**2)),依此类推

但是,有很多元素(大约数千个),并且此操作会重复多次。所以我需要一种方法来快速执行这个。

我想知道是否有一个库(甚至更好的 numpy 函数)可以解决我的问题。我cdist以前使用 from scipy.spatial.distance ,但它不再起作用(我对 scipy 依赖项有问题),所以我正在寻找另一种方式。

标签: pythonperformancenumpy

解决方案


这是一个纯粹的 numpy 解决方案。a是您的输入向量数组。您首先明智地创建距离分量,然后将它们平方,然后将它们对每一行求和,然后得到每个总和的 sqrt。

np.sqrt(np.sum((a[1:] - a[:-1])**2, axis=1))

数组([1.41421356,1.73205081])


推荐阅读