for文を使わずに三次元配列に対し奥行方向にドット積を求める方法
最近数値計算をpythonではじめましたのですが、
例えば、以下のような
import numpy as np
A = np.zeros(500,4,4)
B = np.identity(4)
三次元配列Aと行列Bがあったとします。
ここではAはゼロ行列ですが、実際は非ゼロであるとしてください。
for i in range(0, 500):
B = 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秒程度まで縮めたいと考えておりました。