Как сохранить месяцы из измерения времени NETcdf (0 соответствует jan)?

У меня есть набор данных 3d NETcdf, и я пытаюсь работать с переменной осадков. Я хотел бы построить среднемесячные значения за 60 лет, но мне трудно построить график, который согласуется с предыдущими расчетами усреднения, которые я не использовал для циклов. Вот как я сохраняю значения для января, февраля и беру среднее значение:

janNES = np.empty_like(conprecip[0:720,6:-11,95:141])

for i in range(0,720,12):
     janNES[i]=(NESprecip[i,6:-11,95:141])          

mjanNES=(np.mean(janNES, axis=0))

febNES = np.empty_like(conprecip[0:720,6:-11,95:141])

for i in range(1,720,12):
     febNES[i]=(NESprecip[i,6:-11,95:141]) 

mfebNES=(np.mean(febNES, axis=0))

#values that are plotted, monthly 60 year averages
np.mean(mjanNES-mjan)
np.mean(mfebNES-mfeb)

Где 0-11 — это январь-декабрь, поэтому я аналогичным образом сохраняю значения для других месяцев. Я считаю, что что-то не так с тем, как я храню данные, поскольку он дает странные результаты после того, как я вычитаю элемент управления (mjan и mfeb, сохраняю с использованием этого метода) и снова беру среднее значение. Спасибо, что читаете и помогаете.


person zephyrwhisper    schedule 23.07.2018    source источник
comment
проголосуйте за Барта за полезный ответ и рискуя вызвать его гнев (он не любит альтернативные языковые ответы ;-)), также упомяните, что вы можете получить среднемесячное значение из командной строки с помощью cdo monmean in.nc out .nc, среднее значение всех января, февраля и т. д. с cdo ymonmean in.nc out.nc ежемесячные аномалии вокруг климата с cdo sub -monmean in.nc -ymonmean in.nc monanom.nc   -  person Adrian Tompkins    schedule 23.07.2018
comment
@AdrianTompkins, я начинаю пересматривать свои религиозные убеждения после публикации xarray целенаправленных ответов/комментариев на NetCDF4 вопросов ;-)   -  person Bart    schedule 23.07.2018
comment
ну, как я уже упоминал ранее, я прекрасно понимаю вашу точку зрения, но для меня stackexchange является источником для всех, поэтому многие читатели могут искать ответ на поставленный вопрос, но могут быть не привязаны к выбранному языку ОП, и иногда даже сами плакаты не понимают, что эти другие варианты существуют. Один OP написал комментарий, в котором говорилось, что они перешли на использование CDO / NCO для всех таких задач манипулирования netcdf, хотя они разместили вопрос, ищущий ответ в R ... Но в любом случае ваш ответ более уместен. ваше здоровье!   -  person Adrian Tompkins    schedule 25.07.2018


Ответы (1)


Размер первого измерения вашего массива janNES равен 720, но когда вы зацикливаетесь со временем:

for i in range(0,720,12):
    janNES[i]=...

Вы заполняете только каждый 12-й (0,12,24,...) элемент, но в конце берете среднее значение по всему массиву. Вероятно, вы хотите создать свой массив как:

janNES = np.empty_like(conprecip[0:720:12,6:-11,95:141])

И затем переберите его, например:

for ii,i in enumerate(range(0,720,12)):
    janNES[ii]=(NESprecip[i,6:-11,95:141])

ii теперь запускается из 0,1,2,..,59, а i запускается из 0,12,24,..,708.


Кстати, для этого вам не нужны циклы for, Numpy может выбирать данные напрямую, разрезая исходный массив:

janNES = NESprecip[0:720:12, 6:-11, 95:141]
febNES = NESprecip[1:720:12, 6:-11, 95:141]

И вы даже можете рассчитать среднее значение непосредственно из этого:

mjanNES = NESprecip[0:720:12, 6:-11, 95:141].mean(axis=0)
person Bart    schedule 23.07.2018