Среднесуточные значения за 30-летний период с прилежащими днями

У меня есть сетка (сетка 10 км) среднесуточные температуры с 19610101 по 19901231 в файле netcdf. Я хотел бы рассчитать статистические 30-летние значения (среднее значение и т. д.), чтобы, например, 4 января должны были иметь значения с 1 января по 7 января каждого года 1961...1990: каждая точка сетки и день должны иметь 210 значений .

Исходный размер сетки составляет 68(x) * 116 (y) * 10957 (дней), а окончательный размер сетки составляет 68 * 116 * 365.

Сценарий ниже работает, но медленно. Не могли бы вы предложить мне лучшее решение, чтобы я мог рассчитать статистические значения также для сетки 1 км.


days <- ncvar_get(nc_in,"Time")

days.px <- as.POSIXlt(days,formt="%d-%m-%")



for (year_day in 0:364) { 

  days_in_interest <- (year_day - 3):(year_day + 3)

  days_in_interest[which(days_in_interest < 0)] <- 365 + days[which(days_in_interest < 0)]

  days_in_interest[which(days_in_interest > 364)] <- days_in_interest[which(days_in_interest >364)] - 364

  t_values <- grid_values[,,which((days.px$yday%in%days_in_interest )&days.px$yday!=365)]
 
  t_mean <- apply(t_values , c(1,2), mean) # grid point mean 

}


person Pentti Pirinen    schedule 30.07.2020    source источник
comment
Пожалуйста, наведите порядок в своем вопросе. Уточните, какой язык вы используете и т. д.   -  person Robert Wilson    schedule 30.07.2020


Ответы (1)


Это может быть легко достигнуто с помощью CDO:

cdo runmean,7 infile outfile
person Robert Wilson    schedule 30.07.2020
comment
Спасибо, вроде очень понятно! А если я хочу рассчитать процентили 5% и 95% на каждый день года? - person Pentti Pirinen; 31.07.2020
comment
Я пытался, но это было не совсем то, что я хотел: среднее значение за 30-летний период для каждого годового дня (1...365). Это могут быть хорошие исходные данные для расчетов средних значений, но они не подходят для расчетов процентилей. - person Pentti Pirinen; 31.07.2020
comment
Если вам нужно руководство о том, как рассчитать процентили, задайте вопрос на SO - person Robert Wilson; 31.07.2020