数値計算の高速化
Q&A
解決したいこと
数値計算の高速化
例)
現在、2次元配列の数値計算のプログラムを作成しています。
以前作成した2重ループの数値計算のプログラムでは問題なく
前ステップの値(i-194)が-1より小さかったら処理1
前ステップの値(i-194)が-1より大きかったら処理2
となるような計算はされていますが配列が巨大なためものすごく時間がかかってしまいます(下に載せてあります)。
ということもありスライス機能を使って高速化させようと思ったのですが、一度にすべて計算してしまうスライス機能で処理の条件分岐ができるのか知りたいです。
またほかの良い方法がありましたら是非ご教授宜しくお願い致します...
発生している問題・エラー
なし
例)
なし
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
#以前作成した2重ループの数値計算
c1=1190000
c2=113000000
c3=1.66
h1=0.003
kf1=0.00034
kl1=0.0004
x=1.2
for i in range(194, prd.shape[0]):
for j in range(prd.shape[1]):
if prd[i-194,j]<=-1:
prd[i,j]=prd[i-194,j]+2/(x*np.log(c1+c2/(0-prd[i-194,j])**c3))*(h1*(24-prd[i-194,j])+(kf1+(kl1-kf1)*(0+1)/(0-prd[i-194,j]))*(prd[i-194,j-1]-2*prd[i-194,j]+prd[i-194,j+1])/x)
else:
prd[i,j]=prd[i-194,j]+2/(x*np.log(c1))*(h1*(24-prd[i-194,j])+kl1*(prd[i-194,j-1]-2*prd[i-194,j]+prd[i-194,j+1])/x)
#現在
c1=1190000
c2=113000000
c3=1.66
h1=0.003
kf1=0.0034
kl1=0.004
x=1.2
for i in range(194, prd.shape[0]):
if prd[i-194, 1:]<=-1: ???????ここが不明
prd[i, 1:]=prd[i-194, 1:]+2/(x*np.log(c1+c2/(0-prd[i-194, 1:j])**c3))*(h1*(24-prd[i-194, 1:])+(kf1+(kl1-kf1)*(0+1)/(0-prd[i-194, 1:]))*(prd[i-194, 0:-1]-2*prd[i-194, 1:]+prd[i-194, 2:])/x)
if prd[i-194, 1:]>-1: ????????ここが不明
prd[i, 1:]=prd[i-194, 1:]+2/(x*np.log(c1))*(h1*(24-prd[i-194, 1:])+kl1*(prd[i-194, 0:-1]-2*prd[i-194, 1:]+prd[i-194, 2:])/x)
例)
自分で試したこと
ここに問題・エラーに対して試したことを記載してください。