2011-12-14 3 views
3

이 방법을 벡터화하는 방법은 무엇입니까? 길이 N_frequencysteps의 모든 배열은 1 차원 NumPy와 배열 인 경우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) 

이 작동합니다. 벡터화의

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])) 

이 다른 모든 변수는 스칼라 있다고 가정합니다.