объединение пространственных файлов netcdf с использованием xarray python

Есть ли способ объединить 2 или более файлов netCDF с тем же временным измерением, но с разными пространственными доменами в один файл netCDF? Пространственные области задаются координатами широты и долготы? В документации для xarray concat, merge и т.д. Они говорят, что они работают с одним измерением

Ответы

Ответ 1

Мое понимание вашего вопроса состоит в том, что вы хотите открыть несколько файлов netcdf, которые содержат разные пространственные разделы ваших данных, где общий набор данных был разбит вдоль lat и lon.

Если это так, то я боюсь, что xarray не поддерживает это на данный момент, я спросил о такой же проблеме в xarray github здесь.

То же самое было задано и здесь. concat решение, упомянутое там, будет работать.

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

Ответ 2

Я не знаю "автоматизированного" способа сделать это в python (или R, FORTRAN), только вручную считывая файлы в более крупный массив, а затем записывая этот массив в новый файл netcdf, но есть более " автоматизировать ", чтобы сделать это из командной строки с помощью CDO.

Если вы определяете файл описания домена grid.txt, содержащий два (или более) региона файлов:

gridtype = lonlat
gridsize = 420
xname = lon
xlongname = longitude
xunits = degrees east
yname = lat
ylongname = latitude
yunits = degrees north
xsize = 21
ysize = 20
xfirst = -11.0
xinc = 1
yfirst = -20.0
yinc = 1

а затем вы "развернете" первый файл file1.nc в более крупный домен, а затем объедините содержимое обоих файлов netcdf:

cdo expand,grid.txt file1.nc large.nc
cdo mergegrid large.nc file1.nc merge1.nc
cdo mergegrid merge1.nc file2.nc final_merge.nc 

Я нашел этот soln здесь: https://code.mpimet.mpg.de/boards/1/topics/26 и использовал его, когда мне нужно объединить 2 или 3 файла вместе. Однако, когда мне нужно было объединить много сот файлов вместе, например, одну широтную строку данных, я написал ручную программу (в R в моем случае).