在numpy中,用三维数组的第二维乘以一维数组的最快方法是什么?



你有一个形状(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的形状相匹配。然后按元素进行乘法运算,一如既往。

相关内容

  • 没有找到相关文章

最新更新