在numpy中,将3维数组的第二维乘以1维数组的最快方法是什么?

时间:2011-08-17 16:36:41

标签: python arrays multidimensional-array 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]

1 个答案:

答案 0 :(得分:5)

使用broadcasting

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)。广播在左侧添加新轴, 因此广播形状(1,3,1)。广播也沿着长度为1的轴重复项目。因此,当乘以A时,它会进一步广播以形成(2,3,4)。这符合A的形状。乘法然后一如既往地以元素方式进行。