如何制作向量化方法来计算多维数组之间的成对曼哈顿/ L1距离?

时间:2019-02-15 02:19:04

标签: python numpy

假设我有两个大小为(4000,3)的数组。我想以向量化的方式来计算从第一个数组的每个向量到第二个数组中的每个向量的L1 / Manhattan距离,这样我最终得到一个(4000,4000)数组。

我当前的方法是基于将(4000,3)分成(4000,1)的3个单独的数组并进行广播(类似于此处:Python alternative for calculating pairwise distance between two sets of 2d points)。

但是,如果我的初始矩阵的大小不同,例如(4000,4)或(4000,5),则此方法实际上不起作用。然后我的代码就会中断,因为它假设有3个通道。

因此,对于创建通用矢量化方法可以计算成对的L1距离,我将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以使用广播来完成整个操作(如果我了解您要正确执行的操作)。首先计算向量的成对差异(结果为形状N,N,k),然后计算每个向量的绝对值之和。

N = 4000
k = 4

X = np.random.rand(N,k)
Y = np.random.rand(N,k)

Z = np.sum(np.abs(X[:,None]-Y[:]),axis=-1)