Как работать с одним измерением массива? - PullRequest
0 голосов
/ 02 октября 2018

Я пришел из IDL, поэтому я больше всего привык к циклам с явной индикацией.Я читал о том, как python делает вещи по-другому, и что вы должны просто сказать:

for thing in things:

Что я не могу понять, так это если у меня есть 4-мерный массив, и я хочу выполнить операциюв одном измерении массива, как сохранить результат в 4-мерном массиве и сделать это «питоном».

У меня есть 4-мерный массив по времени, высоте, широте, долготе.Я хочу сгладить его, используя среднее значение окна N = 9.

Вот код, с которым я работаю:

KMCM_T = g.variables['temperature'][:,:,:,:]      #K
N = 9
T_bar_run = []

for idx, lon in enumerate(KMCM_lon):
    for idy, lat in enumerate(KMCM_lat):
        for idz, lev in enumerate(KMCM_levels):
            T_bar_run[:][idz][idy][idx] = np.convolve(KMCM_T[:,idz,idy,idx], np.ones((N,))/N, mode='same')

1 Ответ

0 голосов
/ 02 октября 2018

В этом конкретном случае вы, вероятно, могли бы использовать scipy.ndimage.convolve1d:

from scipy.ndimage import convolve1d

T_bar_run = convolve1d(KMCM_T, np.ones(N)/N, axis=0, mode='constant')

. «Кукольный способ делать вещи» - избегать циклов, потому что в числовых приложениях часто издержки интерпретируемого цикла снижают стоимостьего полезная нагрузка.Это делается с помощью векторизованных функций, то есть функций, которые применяют определенную операцию к каждой ячейке своих аргументов массива.

Многие такие функции действуют естественным образом в одном или нескольких измерениях, поэтому вы часто сталкиваетесь с axis аргумент ключевого слова.

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