現在、Python / Numpy で実行するのに 1 時間強かかるコードを高速化しようとしています。計算時間の大部分は、下に貼り付けられた関数で発生します。
Z をベクトル化しようとしていますが、トリプル for ループではかなり難しいことがわかりました。numpy.diff
関数をどこかに実装できますか?見てみましょう:
def MyFESolver(KK,D,r,Z):
global tdim
global xdim
global q1
global q2
for k in range(1,tdim):
for i in range(1,xdim-1):
for j in range (1,xdim-1):
Z[k,i,j]=Z[k-1,i,j]+r*q1*Z[k-1,i,j]*(KK-Z[k-1,i,j])+D*q2*(Z[k-1,i-1,j]-4*Z[k-1,i,j]+Z[k-1,i+1,j]+Z[k-1,i,j-1]+Z[k-1,i,j+1])
return Z
tdim = 75
xdim = 25