Есть ли способ обрезать файл NETCDF?

Представьте, что у вас есть файл example.nc, в котором данные о ветре определены в области 90N, 90S, 180E, 180W. Могу ли я каким-либо образом в linux с помощью простой команды nc-type (без извлечения данных в matlab / python для перезаписи) обрезать этот файл, чтобы включить меньшую область, подмножество вышеперечисленного.

Например, 30N, 10S, 60E и 30W.


person jhc    schedule 08.09.2014    source источник


Ответы (3)


Да, используя ncks из пакета NCO: http://nco.sourceforge.net/nco.html

Если вы знаете индексы, соответствующие желаемому диапазону широты / долготы, скажем, 30-40 по широте и 25-50 по долготе, например, тогда вы можете обрезать файл netCDF с помощью

ncks -d lat,30,40 -d lon,25,50 example.nc -O cropped_example.nc

убедитесь, что вы указали индексы с целыми значениями.

В противном случае вы также можете напрямую указать диапазон желаемых значений широты и долготы, но в этом случае вы должны обязательно использовать десятичные точки для передачи диапазона как числа с плавающей запятой.

 ncks -d lat,30.,-10. -d lon,-30.,60. example.nc -O cropped_example.nc
person N1B4    schedule 09.09.2014
comment
В качестве предупреждения: иногда вы можете получить сообщение об ошибке, если не поставите десятичный разделитель после тусклых диапазонов. Итак, если у вас возникнут проблемы, попробуйте вместо этого: ncks -d lat,30.,40. -d lon,25.,50. example.nc -O cropped_example.nc. - person brews; 11.08.2015
comment
@brews с использованием десятичной дроби указывает диапазон фактических латов / лонов для извлечения, а использование целых чисел указывает диапазон индексов, соответствующих фактическим латам / лонам. Хорошо уточнить! - person N1B4; 11.08.2015

NCO работает нормально, но просто чтобы перечислить альтернативу, можно также сделать это с помощью cdo (операторы климатических данных), которые мне легче запомнить. Вы можете напрямую указать значения долготы и широты следующим образом:

cdo sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc

где lon1, lon2, lat1, lat2 определяют границы требуемой области.

Для получения дополнительных сведений об извлечении субрегионов я разместил видео по этой теме на моем канале YouTube

Если у вас еще не установлен cdo, вы можете получить его в Ubuntu с помощью

sudo apt-get install cdo

cdo имеет множество других функций для обработки, объединения и разделения файлов, а также отличную онлайн-документацию. Обратите внимание, что для работы CDO переменные координат (широта / долгота) должны быть определены в соответствии с соглашениями CF, поэтому в этом случае решение NCO больше надежный (см. комментарии).

person Adrian Tompkins    schedule 09.01.2017
comment
+1 за cdo. Я только что экспериментировал, и у него много полезных функций, я привел пару примеров, как обрезка по bbox, оси z и временному измерению здесь (без необходимости знать индекс конечно ????) - person danwild; 23.03.2018

Если вы используете Linux или macOS, вы можете легко сделать это с помощью nctoolkit (https://nctoolkit.readthedocs.io/en/latest/) на Python.

import nctoolkit as nc
data = nc.open_data("example.nc")
data.crop(lon = [25, 50], lat = [30, 40])
data.to_nc("output.nc")

Под капотом nctoolkit использует CDO. Таким образом, приведенное выше является эквивалентом упомянутого выше подхода CDO:

cdo sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc
person Robert Wilson    schedule 11.09.2020