首页 > 解决方案 > 计算数组中每个元素之间的距离

问题描述

我有一个数组,

a = np.array([1, 3, 5, 10])

我想创建一个函数来计算每个元素与其他元素之间的距离。不应该有 for 循环,因为速度很关键。

上述的预期结果将是:

array([[0, 2, 4, 9],
       [2, 0, 2, 7],
       [4, 2, 0, 5],
       [9, 7, 5, 0]])

标签: numpypermutation

解决方案


您可以使用numpy.subtract.outer

np.abs(np.subtract.outer(a, a))

array([[0, 2, 4, 9],
       [2, 0, 2, 7],
       [4, 2, 0, 5],
       [9, 7, 5, 0]])

或等效地使用以下任一方法:

np.abs(a - a[:, np.newaxis])
np.abs(a - a[:,  None])
np.abs(a - a.reshape((-1, 1)))

推荐阅读