python-3.x - 计算两个数组列的成对总和

标签 python-3.x numpy multidimensional-array numpy-ndarray numpy-einsum

我正在寻找一种方法来避免以下代码片段中的嵌套循环,其中 AB 是二维数组,每个形状 ( m, n) 其中 mn 为任意正整数:

import numpy as np

m, n = 5, 2
a = randint(0, 10, (m, n))
b = randint(0, 10, (m, n))

out = np.empty((n, n))
for i in range(n):
    for j in range(n):
        out[i, j] = np.sum(A[:, i] + B[:, j])

上面的逻辑大致相当于

np.einsum('ij,ik', A, B)

除了 einsum 计算乘积之和。

有没有一种方法,相当于einsum,可以计算总和?或者我必须为此操作编写扩展吗?

最佳答案

einsum需要执行元素乘法,然后进行求和(可选)。 因此,它可能不适用于/不需要解决我们的案例。继续阅读!

方法#1

我们可以利用broadcasting使得第一个轴对齐 将维度扩展到 3D 后,第二个轴按元素求和。最后,我们需要沿第一个轴求和 -

(A[:,:,None] + B[:,None,:]).sum(0)

方法#2

我们可以简单地对每个列进行外加 -

A.sum(0)[:,None] + B.sum(0)

方法#3

因此,引入einsum -

np.einsum('ij->j',A)[:,None] + np.einsum('ij->j',B)

关于python-3.x - 计算两个数组列的成对总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50965616/

相关文章:

python - 如何将工作表转换为 Pandas 中的数据框?

Python确定数组中网格上多边形内的平均值并提取最大值

java - 在多维数组中实现 Rook 逻辑

arrays - 如何测试多维数组?

python-3.x - 动态规划原语计算器代码优化

Python遍历列表列表

python-3.x - 删除使用 Conda Develop 添加的路径/代码

python - searchsorted - 全局名称 "x"未定义

python - 使用索引列表切片 n 维 numpy 数组

java - 是否可以在 Java 中创建泛型的二维锯齿状数组?