Python: векторизация на 4-м массиве - PullRequest
0 голосов
/ 28 августа 2018

У меня есть 4-й массив скорости ветра (время, ht, x, y), из которого я пытаюсь рассчитать турбулентную кинетическую энергию. Чтобы сделать это, на каждом временном шаге и на каждой высоте я должен вычислить среднее значение трех компонентов ветра, вычесть это среднее значение из скорости в каждой точке сетки, вычислить TKE в каждой точке сетки и усреднить его при этом. рост. Это приводит к множеству циклов, как вы можете видеть в моем коде ниже. Я запустил его один раз, и он занял неделю, что не способствует быстрому анализу.

Мой вопрос: есть ли способ векторизовать процессы, происходящие в этих циклах, чтобы ускорить мой код? Я видел примеры по 1- и 2-му массивам, но ничего такого, что я пытаюсь сделать.

tkehgt = np.empty((289,39),np.float32)
for c in range(0,289,1):
    print count
    u_avg = np.empty((39),np.float32)
    v_avg = np.empty((39),np.float32)
    w_avg = np.empty((39),np.float32)
    for d in range(hgt_final.shape[1]):
        u_avg[d] = np.average(u[c,d,:,:])
        v_avg[d] = np.average(v[c,d,:,:])
        w_avg[d] = np.average(w[c,d,:,:])
    for e in range(hgt_final.shape[1]):
        tkegrid = np.empty((300,300),np.float32)
        for f in range(hgt_final.shape[2]):
            for g in range(hgt_final.shape[3]):
                uprime = u[c,e,f,g] - u_avg[e]
                vprime = v[c,e,f,g] - v_avg[e]
                wprime = w[c,e,f,g] - w_avg[e]
                tkegrid[f,g] = 0.5*(uprime**2+vprime**2+wprime**2)
        tkehgt[count,e] = np.average(tkegrid[:,:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...