Rozważmy te dwa pliki:

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)

Jeśli te dwa wymiary są nieograniczone, ncrcat działa bezpośrednio i łączy v2 wzdłuż B i v1 wzdłuż A.

ncrcat test_0.nc test_1.nc test_01.nc

Jeśli jednak wymiary mają stały rozmiar, jak w powyższym przykładzie, muszę sukcesywnie ustawić A i B jako wymiary rekordu, aby były nieograniczone, a następnie połączyć

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

Czy jest inny sposób na zrobienie tego z mniejszą liczbą linii?

0
Seb 19 listopad 2019, 19:35

1 odpowiedź

Niefortunne --mk_rec_dmn zmienia tylko jeden wymiar na wywołanie. Zmiana wielu stałych wymiarów na wymiary rekordów znajduje się na naszej liście TODO (nr 1129). Możesz jednak wyeliminować instrukcje mv, używając funkcji nadpisywania z -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

1
Charlie Zender 21 listopad 2019, 04:29