Извлечь и просуммировать определенные слои переменной NetCDF

У меня есть файл NetCDF, вот усеченный вывод ncdump -h:

dimensions:
    lat = 720 ;
    lon = 1440 ;
    cft = 64 ;
    natpft = 14 ;
double PCT_CFT(cft, lat, lon) ;
    PCT_CFT:long_name = "percent cft" ;
    PCT_CFT:units = "unitless" ;
    PCT_CFT:_FillValue = -9999. ;
    PCT_CFT:coordinates = "LON LAT" ;
double PCT_NAT_PFT(natpft, lat, lon) ;
    PCT_NAT_PFT:long_name = "percent pft" ;
    PCT_NAT_PFT:units = "unitless" ;
    PCT_NAT_PFT:_FillValue = -9999. ;
    PCT_NAT_PFT:coordinates = "LON LAT" ;

Мне нужно извлечь и суммировать значения из переменной PCT_CFT для слоев 3, 4, 61 и 62 по измерению cft, а затем просуммировать почти все оставшиеся слои (т.е. 5-60, 63, 64) и сложить их. два результата для переменной PCT_NAT_PFT как слои 16 и 15 по измерению natpft соответственно.

Я хотел бы добиться этого с помощью NCO (или CDO), если это возможно, я хочу избегать использования других инструментов, таких как Python или R ... Я знаю только, как суммировать переменную по всему измерению, но не только по выбранным слоям - я поэтому, вероятно, можно обойти эту проблему, но я хотел бы знать, есть ли лучший и более чистый способ сделать это.


person Janina    schedule 15.01.2018    source источник
comment
Не могли бы вы добавить ссылку на файл примера, чтобы мы могли протестировать наши потенциальные решения?   -  person Adrian Tompkins    schedule 16.01.2018


Ответы (1)


Я предполагаю, что ваш входной файл - in.nc
И ваши слои cft основаны на одном !?

1) сумма по слоям КФТ, 3-4,61-62

ncks --msa_usr_rdr -v PCT_CFT -d cft,2,3 -d cft,60,61  in.nc in_1.nc   
ncwa -a cft -y sum  in_1.nc sum_1.nc

2) сумма по слоям КФТ, 5-60,63-64

ncks --msa_usr_rdr -v PCT_CFT -d cft,4,59 -d cft,62,63 in.nc in_2.nc            
ncwa -a cft -y sum  in_2.nc sum_2.nc

3) добавьте два новых слоя в PCT_NAT_PFT

ncks -v PCT_NAT_PFT --msa_usr_rdr -d natpft,0,13 -d natpft,0,1 in.nc in_3.nc

4) сложить суммы из 1), 2) в PCT_NAT_PFT

ncap2 -v -A -s 'PCT_NAT_PFT(15,:,:)=PCT_CFT(:,:);'  sum_1.nc in_3.nc
ncap2 -v -A -s 'PCT_NAT_PFT(14,:,:)=PCT_CFT(:,:);'  sum_2.nc in_3.nc
person Henry Fey    schedule 16.01.2018
comment
Аргументы гиперпластинки измерения (-d ...) для ncks могут использовать индексы на основе 1 напрямую, если вы добавите аргумент -F (или --fortran) nco.sf.net/nco.html#-F. Тогда вам не нужно помнить, что нужно вычесть единицу из всех индексов, передаваемых ncks или ncwa, однако опция -F не ​​работает с ncap2, поэтому будьте осторожны. - person Charlie Zender; 16.01.2018
comment
Спасибо. Первые два шага работают нормально. Но насчет показателей размеров моего файла я не уверен. Очевидно, что при добавлении двух новых слоев возникает некоторая проблема. Я просмотрел результат (in_3.nc) в Panoply, и у него правильно было 16 слоев. Однако индексы изменились с 0 до 13, а последние два были 0 и 1 (и, таким образом, отображали исходные первые два слоя, а не суммы). Кроме того, не могли бы вы объяснить вариант --msa_usr_rdr? Я никогда с этим не сталкивался. [Плюс опечатка в 4) PC_NAT_PFT, но я не могу ее отредактировать, так как это очень незначительное изменение.] - person Janina; 17.01.2018