Код этого ответа действительно работает Add a new dimension, но он не делает то, что я хочу.Как добавить новое измерение к существующей переменной в netCDF?
Чтобы проиллюстрировать мою проблему дальше - у меня есть следующие определения: Время (неограниченное), широта, долгота, уровень как четыре измерения и одна переменная высота геопотенциала. Что я хочу сделать, так это добавить размер dimz_Z в существующую высоту переменной геопотенциала.
Сейчас с ответом в приведенном выше здесь код, как файл NetCDF выглядит с ncdump
float hgt(time, level, lat, lon)
Но размерность dimz_Z отсутствует, как показано ниже с выхода ncks.
hgt dimension 0: time, size = 1 NC_DOUBLE, chunksize = 1 (Record coordinate is time)
hgt dimension 1: level, size = 1 NC_FLOAT, chunksize = 1 (Coordinate is level)
hgt dimension 2: lat, size = 23 NC_FLOAT, chunksize = 23 (Coordinate is lat)
hgt dimension 3: lon, size = 21 NC_FLOAT, chunksize = 21 (Coordinate is lon)
Он появляется в определениях, но и как автономное измерение и не части размерности ХГТ
dimz_Z: type NC_FLOAT, 1 dimension, 0 attributes, compressed? no, chunked? no, packed? no
dimz_Z size (RAM) = 483*sizeof(NC_FLOAT) = 483*4 = 1932 bytes
dimz_Z dimension 0: dimz_Z, size = 483 NC_FLOAT (Coordinate is dimz_Z)
Это выход из файла
time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 hgt[0]=53 m
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 hgt[1]=55 m
Что я хочу:
time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 dimz_Z[0]=0 hgt[0]=53 m
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 dimz_Z[0]=0 hgt[1]=55 m
То, что мне сказал друг, заключается в том, что я не могу добавить это измерение к существующей переменной. Вместо fortran я должен сначала определить переменную hgt как пятимерную переменную и снова поместить значения. Это правильно или есть альтернатива? Я использую API netcdf от Fortran 77.
Ваш друг верен. – cmaster
Является ли dimz_Z только распущенной сетью lon/lat (21 * 23 = 483)? Почему вы хотите объединить количество данных в вашем файле? Я вполне уверен, что вы хотите сделать что-то еще. Вы уверены, что просто не хотите добавлять переменную с фактической высотой? Это не вопрос Фортрана ... – RussF
@RussF - Это вертикальная координата в моей системе. У меня есть лат, лон и эта. Сделав его трехмерным – gansub