连接具有多个“记录”尺寸的netcdf文件

时间:2019-11-19 16:35:30

标签: python nco ncks

让我们考虑这两个文件:

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 个答案:

答案 0 :(得分: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