2011-12-14 17 views
3

これをベクトル化する方法はありますか?Numpyのループのためのベクトル化

waveheight=zeros(10000) 
for t in range(10000): 
    for j in range(N_frequencysteps): 
     waveheight[t] = waveheight[t] + (Abs_S_newwave[j] * cos (K[j] * x - (omega[j] * ((t*0.01) - TimeShift)) + TSi_omega[j] + arg_S_newwave[j])) 

答えて

5
waveheight = (Abs_S_newwave[:,None] * cos(K[:,None] * x - (omega[:,None] * ((arange(10000)[None,:]*0.01) - TimeShift)) + TSi_omega[:,None] + arg_S_newwave[:,None])).sum(axis=0) 

N_frequencystepsのすべての配列は、1-Dのnumpyのアレイである場合、これは動作します。ベクトル化の

0

少なくとも一つのステップがwaveheightの要素を反復しないように次のようになります。

waveheight=zeros(10000) 
ts = arange(10000) 
for j in range(N_frequencysteps): 
    waveheight += (Abs_S_newwave[j] * cos(K[j] * x - (omega[j] * 
      ((ts*0.01) - TimeShift)) + TSi_omega[j] + arg_S_newwave[j])) 

これは、他のすべての変数がスカラーであることを前提としています。

関連する問題