Python 用广播代替轴上的循环
假设我有:Python 用广播代替轴上的循环,python,python-3.x,numpy,array-broadcasting,Python,Python 3.x,Numpy,Array 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的结果,然后沿第一个轴对该结果求和 即: 我可以通过广播而不是: 使用np。沿\u轴应用\u或 在每一列中循环 您可以使用- 或者,使用(可能用于踢腿)- 你可以用
a = np.array([[2, 4],
[6, 8]])
b = np.array([[1, 3],
[1, 5]])
我想去:
c = np.array([[20,32],
[28, 44]])
其中c
是a
的每一列乘以b
的结果,然后沿第一个轴对该结果求和
即:
我可以通过广播而不是:
- 使用
或np。沿\u轴应用\u
- 在每一列中循环
1+对于井涌。和
einsum
对于较小的阵列将较慢,而对于较大的阵列将较快?@BradSolomon没有轴对齐要求,我认为随着您增加总和减少的数量,即使用大型阵列,np.dot
会更好。1+用于踢击。而einsum
对于较小的阵列会更慢,对于较大的阵列会更快?@BradSolomon没有轴对齐要求,我认为随着你增加求和减少的数量,即使用较大的阵列,np.dot
会更好。
print(np.sum(a[:, 0] * b, axis=1))
[20 32]
print(np.sum(a[:, 1] * b, axis=1))
[28 44]
b.dot(a).T
np.einsum('ij,ki->jk',a,b)