Есть ли способ обрезать файл NETCDF?
Представь, что у тебя есть файл example.nc
, который имеет данные о ветре, определенные в области 90N, 90S, 180E, 180W. Есть ли в любом случае я мог бы в Linux, с помощью простой команды nc-type (без извлечения данных в matlab/python для перезаписи), обрезать этот файл, чтобы включить меньшую область, подмножество выше.
Например, 30N, 10S, 60E и 30W.
2 ответа
Да, используя 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
NCO работает нормально, но просто для перечисления альтернативы можно также сделать это с помощью cdo (операторы климатических данных), что, как мне кажется, легче запомнить, и означает, что вы можете напрямую указать значения долготы и широты:
cdo sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc
где lon1,lon2,lat1,lat2 определяют границы области, в которой вы нуждаетесь. Если он еще не установлен, вы можете получить его в Ubuntu с помощью
sudo apt-get install cdo
У cdo есть много других функций для обработки, объединения и разделения файлов, а также отличная онлайн-документация.
Обратите внимание, что для работы CDO переменные координат (широта / долгота) должны быть определены в соответствии с соглашениями CDF. Подход ncks гораздо надежнее, так как он подходит для любой оси, но вам нужно разработать индекс.
Если вы используете Linux или macOS, вы можете легко сделать это с помощью nctoolkit (https://nctoolkit.readthedocs.io/en/latest/) на Python.
import nctoolkit as nc
nc.options(lazy = True)
data = nc.open_data("example.nc")
data.clip(lon = [25, 50], lat = [30, 40])
data.write_nc("output.nc")
Под капотом nctoolkit использует CDO. Таким образом, приведенное выше является эквивалентом упомянутого выше подхода CDO:
cdo sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc