你有一个形状(a,b,c)的数组,你想用形状(b)的数组乘以第二次元
for循环可以,但是有没有更好的方法呢?
交货。
A = np.array(shape=(a,b,c))
B = np.array(shape=(b))
for i in B.shape[0]:
A[:,i,:]=A[:,i,:]*B[i]
使用广播:
A*B[:,np.newaxis]
例如:In [47]: A=np.arange(24).reshape(2,3,4)
In [48]: B=np.arange(3)
In [49]: A*B[:,np.newaxis]
Out[49]:
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]]])
B[:,np.newaxis]
的形状为(3,1)。广播在左边增加了新的轴,这被广播到shape(1,3,1)。广播也沿着长度为1的轴重复项目。因此,当与A
相乘时,它进一步广播到形状(2,3,4)。这与A
的形状相匹配。然后按元素进行乘法运算,一如既往。