默认情况下,ND数组(例如A)与一维1(B)的乘法是在最后一个轴上执行的,这意味着乘法A * B仅在下有效
A.shape[-1] == len(B)
要在另一个轴上将A与B相乘而不是-1,一种解决方法是在相乘前后交换A的轴:
要在轴“ axis”上乘以A和B,请使用
C = (A.swapaxes(axis, -1) * B).swapaxes(axis, -1)
示例
A = np.arange(2 * 3 * 4).reshape((2, 3, 4))
B = np.array([0., 1., 2.])
print(A, B)
array([[[ 0., 0., 0., 0.],
[ 4., 5., 6., 7.],
[16., 18., 20., 22.]],
[[ 0., 0., 0., 0.],
[16., 17., 18., 19.],
[40., 42., 44., 46.]]])
C = A * B
ValueError: operands could not be broadcast together with shapes (2,3,4) (3,)
C = (A.swapaxes(1, -1) * B).swapaxes(1, -1)
array([[[ 0., 0., 0., 0.],
[ 4., 5., 6., 7.],
[16., 18., 20., 22.]],
[[ 0., 0., 0., 0.],
[16., 17., 18., 19.],
[40., 42., 44., 46.]]])
请注意,A的第一个原始数已乘以0
最后的原始数乘以2