【问题标题】:How make a vectorized approach for calculating pair-wise Manhattan/L1 distance between multi-dimensional arrays?如何使用矢量化方法计算多维数组之间的成对曼哈顿/L1 距离?
【发布时间】:2019-02-15 02:19:04
【问题描述】:

假设我有两个大小为 (4000, 3) 的数组。我想以矢量化方式做的是计算从第一个数组的每个向量到第二个数组中的每个向量的 L1/Manhattan 距离,这样我最终得到一个 (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 距离的广义矢量化方法的任何帮助,我将不胜感激!

【问题讨论】:

  • 认为无论频道数量如何,cdist 都应该工作。

标签: python numpy


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多