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]
你有一個形狀數組(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]
使用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
的形狀。像以前一樣,乘法運算繼續按照元素進行。
+1的解釋與答案一致。 :) 謝謝! – Abhinav
你是什麼意思的第二維?你是否指'a = 0'處的'(b,c)'尺寸? – jtbandes
我舉了一個例子。 –