用广播替换轴上的循环

Replace looping-over-axes with broadcasting

假设我有:

a = np.array([[2, 4],
              [6, 8]])    
b = np.array([[1, 3],
              [1, 5]])

我想去:

c = np.array([[20,32],
              [28, 44]])

其中 ca 的每一列乘以 b,然后沿第一个轴对该结果求和的结果。

即:

print(np.sum(a[:, 0] * b, axis=1))
[20 32]

print(np.sum(a[:, 1] * b, axis=1))
[28 44]

我可以通过广播而不是:

你可以使用np.dot-

b.dot(a).T

或者,使用 np.einsum(可能是为了踢球)-

np.einsum('ij,ki->jk',a,b)