Объединение файлов 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