Векторизация для цикла в Numpy - PullRequest
3 голосов
/ 14 декабря 2011

есть ли способ векторизовать это?

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

Ответы [ 2 ]

5 голосов
/ 14 декабря 2011
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 являются одномерными массивами.

0 голосов
/ 14 декабря 2011

По крайней мере, одним шагом векторизации было бы не повторять элементы 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]))

Это предполагает, что все остальные переменные являются скалярами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...