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

投稿者: Anonymous

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

例えば

A.shape #(3,5,5)
B.shape #(3,)

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

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

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

解決

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

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

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *