用广播替换轴上的循环

时间:2017-07-19 20:41:00

标签: python python-3.x numpy numpy-broadcasting

说我有:

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

我想:

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

其中c是将a的每一列乘以b的结果,然后将该结果与第一轴相加。

即:

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

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

我可以通过广播而不是:

  • 使用np.apply_along_axis
  • 遍历每一列?

1 个答案:

答案 0 :(得分:4)

您可以使用np.dot -

b.dot(a).T

或者,使用np.einsum(对于踢球可能) -

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