Объединение файлов netcdf с несколькими измерениями "записи"

Давайте рассмотрим эти два файла:

from netCDF4 import Dataset as dset

for i in range(2):
     with dset('test_{}.nc'.format(i),'w') as f:
         f.createDimension('A',5)
         f.createDimension('B',8)
         f.createVariable('v1',float,('A',))
         f.createVariable('v2',float,('B',))
         f['v1'][:] = range(i*5,i*5+5)
         f['v2'][:] = range(i*8,i*8+8)

Если два измерения неограничены, ncrcat работает напрямую и объединяет v2 вдоль B и v1 вдоль A.

ncrcat test_0.nc test_1.nc test_01.nc

Однако, если размеры имеют фиксированный размер, как в приведенном выше примере, я должен последовательно установить A и B как размер записи, чтобы сделать их неограниченными, а затем объединить

ncks --mk_rec_dmn A test_0.nc test_0u.nc ; mv test_0u.nc test_0.nc
ncks --mk_rec_dmn B test_0.nc test_0u.nc ; mv test_0u.nc test_0.nc
ncks --mk_rec_dmn A test_1.nc test_1u.nc ; mv test_1u.nc test_1.nc
ncks --mk_rec_dmn B test_1.nc test_1u.nc ; mv test_1u.nc test_1.nc
ncrcat test_0.nc test_1.nc test_01.nc

Есть ли другой способ сделать это с меньшим количеством строк?

1 ответ

Несчастный --mk_rec_dmnизменяет только одно измерение за вызов. Изменение нескольких фиксированных измерений в размерности записи находится в нашем списке TODO (№ 1129). Однако вы можете устранитьmv операторы с использованием функции перезаписи с -O:

ncks -O --mk_rec_dmn A test_0.nc test_0.nc
ncks -O --mk_rec_dmn B test_0.nc test_0.nc
ncks -O --mk_rec_dmn A test_1.nc test_1.nc
ncks -O --mk_rec_dmn B test_1.nc test_1.nc
ncrcat test_0.nc test_1.nc test_01.nc

HTH, cz

Другие вопросы по тегам