python - 如何使用矢量化方法计算多维数组之间的成对曼哈顿/L1 距离?
问题描述
假设我有两个大小为 (4000, 3) 的数组。我想以矢量化方式做的是计算从第一个数组的每个向量到第二个数组中的每个向量的 L1/Manhattan 距离,这样我最终得到一个 (4000, 4000) 数组。
我目前的方法是基于将 (4000, 3) 拆分为 3 个单独的 (4000, 1) 数组并进行广播(类似于此处:Python Alternative for computed pairwise distance between two sets of 2d points)。
但是,如果我有大小不同的初始矩阵,例如 (4000, 4) 或 (4000, 5),这种方法就不起作用。然后我的代码会中断,因为它假设有 3 个通道。
因此,对于创建可以计算成对 L1 距离的广义矢量化方法的任何帮助,我将不胜感激!
解决方案
您可以使用广播来完成整个事情(如果我理解您正在尝试正确执行的操作)。首先计算向量的成对差异(结果是 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)
推荐阅读
- python - 如何构造此表单数据以使用 python 发出发布请求
- javascript - 拖动路由的实现
- excel - 如何获取Excel中包含特定文本的单元格旁边的单元格的值
- python - Pandas pivot_table 删除返回所有 None 的聚合函数的值,即使 dropna 参数为 False
- python - Python 3:使用数据框的字典时出现 KeyError 0
- powershell - powershell 对数组元素执行数学运算
- html - 转义的 HTML 标记在危险的 SetInnerHTML 中呈现?
- laravel - Laravel 护照:createToken with time life
- ios - 键盘无法显示视图控制器警告
- coq - Coq 中虚拟值的最佳实践