假设我有两个大小为(4000,3)的数组。我想以向量化的方式计算从第一个数组的每个向量到第二个数组中的每个向量的L1/曼哈顿距离,这样我就得到了一个(4000,4000)数组。
我目前的方法是将(4000,3)分成3个独立的(4000,1)数组并进行广播(类似于这里:Python alternative for calculating pairwise distance between two sets of 2d points)。
但是,如果初始矩阵的大小不同,例如(4000,4)或(4000,5),这种方法就不能真正发挥作用。那么我的代码就会崩溃,因为它假设有3个通道。
因此,如果您能帮助我创建一个可以计算成对L1距离的广义矢量化方法,我将不胜感激!
发布于 2019-02-15 04:40:21
你可以用广播来做所有的事情(如果我理解你想要做什么的话)。首先计算向量的成对差(结果是shape 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)
https://stackoverflow.com/questions/54701821
复制相似问题