1

私は徐々に Matlab から Python に移行しており、反復ループの最適化に関するアドバイスを求めています。これが現在ループを実行している方法です。情報のために、変数を定義するコードを含めました。

nh = 2000 
h = np.array(range(nh))
nt = 10000 
wmin = 1 
wmax = 10
hw = np.array(wmin + (wmax-wmin)*invlogit(randn(1,nh))); 
sl = np.array(zeros((nh,1))+radians(40))
fa = np.array(zeros((nh,1))+radians(35))
c = np.array(zeros((nh,1))+4.4)
y = np.array(zeros((nh,1))+17.6)
yw = np.array(zeros((nh,1))+9.81)
ir = 0.028
m = np.array(zeros((nh,nt)));
m[:,49] = 0.1
z = np.array(zeros((nh,nt)))
z[:,0] = 0+(3.0773-0)*rand(nh,1).T
reset = np.array(zeros((nh,nt)))
fs = np.array(zeros((nh,nt)))

for t in xrange(0, nt-1):
    fs[:,t] = (c.T+(y.T-m[:,t]*yw.T)*z[:,t]*(np.cos(sl.T)**2)*np.tan(fa.T))/(y.T*z[:,t]*np.sin(sl.T)*np.cos(sl.T))
    reset[fs[:,t]<=1,t+1] = 1;
    z[fs[:,t]<=1,t+1] = 0;
    z[fs[:,t]>1,t+1] = z[fs[:,t]>1,t]+(ir/hw[0,fs[:,t]>1]).T

これは、Matlab でコードを最適化する方法ですが、Python ではかなり遅く実行されます。これを行うためのよりpythonicな方法があると思われ、正しい方向への微調整を本当に感謝します。どうもありがとう!

4

2 に答える 2