2011-08-17 264 views
4

你有一个形状数组(a,b,c),并且你想通过一个形状数组(b)乘以第二个维数在numpy中,用一维数组乘以三维数组的第二维的最快方法是什么?

for循环可以工作,但是有没有更好的方法?

Ex。

A = np.array(shape=(a,b,c)) 
B = np.array(shape=(b)) 

for i in B.shape[0]: 
    A[:,i,:]=A[:,i,:]*B[i] 
+0

你是什么意思的第二维?你是否指'a = 0'处的'(b,c)'尺寸? – jtbandes

+0

我举了一个例子。 –

回答

5

使用​​3210:

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的形状。像以前一样,乘法运算继续按照元素进行。

+0

+1的解释与答案一致。 :) 谢谢! – Abhinav