質問: np.dot(A[i,:,:], B) ``` 3次元配列Aの要素に対し奥行き方向に向かって、 A[499,:,:].dot(A[498,:,:])....dot(A[2,:,:]).dot(A[1,:,:]).dot(A[0,:,:]) と言った具体にドット積を求める際に 上記のようなfor文を使ってしまうと時間がかかってしまいます。 同じ処理結果でより高速な計算を行う記述の仕方はありませんでしょうか。 補足 上の、500*4*4の三次元配列Aを順に計算していく過程を数十回繰り返すつもりでいます。 得た結果をフィッティングにも用いたいのでなるべく処理速度を早めたいのです。 一連の過程で最も時間を要した部分がこのループであったため現状は痛手です。 計算するマシンにもよりますが、私の環境ですと、三次元配列を奥行方向へ1,2,...,499,500と ドット積を計算するだけに要する時間は約0.4秒です。 目標は0.1秒程度まで縮めたいと考えておりました。
回答: 行列積は結合法則が成り立つので、multiprocessingを用いて 500個の行列(A1~A500)を分割し(A1~A100,A101~A200,,,A401~A500)、 各グループの行列積を並列に演算し、 各結果の積を求める とすれば処理時間は短くなります。 ただ、その場合でもfor文は必須ですし、 GPUを駆使した方がベターです。