numpyでブロードキャストできない掛け算をforを使わず書く方法


最近数値計算をpythonでやり始めた者です。

例えば

[code]

    A.shape #(3,5,5)
    B.shape #(3,)
    
[/code]

の形をもつA,Bについて

[code]

    numpy.array([ A[i,:,:] * B[i] for i in range(3)]).reshape(5,5)
    
[/code]

を計算したいのですが、この方法では規模が大きくなると遅いような気がしています。  
この操作をより速く動くように書く方法はないものでしょうか？




Benchmarkerを使って試してみました。サイズ10000*7*7を10000回回した結果、

  * `A*np.array([[B]]).T` が一番早く15秒‌​
  * 次が内包表記の245秒（zipを使った場合が220秒）
  * 最後が `A * np.dstack(B).T` で516秒でした。

とりあえず最も速かった `A*numpy.array([[B]])` を使おうと思います。  
ありがとうございました。




Benchmarkerを使って試してみました。サイズ10000*7*7を10000回回した結果、

  * `A*np.array([[B]]).T` が一番早く15秒‌​
  * 次が内包表記の245秒（zipを使った場合が220秒）
  * 最後が `A * np.dstack(B).T` で516秒でした。

とりあえず最も速かった `A*numpy.array([[B]])` を使おうと思います。  
ありがとうございました。

