NetCDF 重排序维度
NetCDF re-ordering dimension
我有 1 个带有变量 ppt
和三维 ppt(time,lat,lon)
的 netCDF 文件。见下文:
dimensions:
time = UNLIMITED ; // (756 currently)
lon = 55 ;
lat = 60 ;
variables:
double time(time) ;
time:standard_name = "time" ;
time:long_name = "time" ;
time:units = "days since 1900-01-01 00:00:00" ;
time:calendar = "gregorian" ;
time:axis = "T" ;
double lon(lon) ;
lon:standard_name = "longitude" ;
lon:long_name = "longitude" ;
lon:units = "degrees_east" ;
lon:axis = "X" ;
double lat(lat) ;
lat:standard_name = "latitude" ;
lat:long_name = "latitude" ;
lat:units = "degrees_north" ;
lat:axis = "Y" ;
int ppt(time, lat, lon) ;
ppt:standard_name = "precipitation_amount" ;
ppt:long_name = "precipitation_amount" ;
ppt:units = "mm" ;
ppt:add_offset = 0. ;
ppt:scale_factor = 0.1 ;
ppt:_FillValue = -2147483648 ;
ppt:missing_value = -2147483648 ;
ppt:description = "Accumulated Precipitation" ;
ppt:dimensions = "lon lat time" ;
ppt:coordinate_system = "WGS84,EPSG:4326" ;
我想重新排序从 time,lat,lon
到 lat,lon,time
的维度。
我使用命令:ncpdq -a lat,lon,time in.nc out.nc
重新排序变量后,lat
维度变为 UNLIMITED
,这是错误的。 time
维度应该是 UNLIMITED
维度。
dimensions:
time = 756 ;
lon = 55 ;
lat = UNLIMITED ; // (60 currently)
...
...
int ppt(lat, lon, time) ;
然后我尝试使用下面的 ncks
命令修复变成 UNLIMITED
的 lat
维度:
ncks --fix_rec_dmn lat out.nc out1.nc
成功了,见下:
dimensions:
lat = 60 ;
lon = 55 ;
time = 756 ;
现在我想使用下面的 ncks 命令再次设置 UNLIMITED 时间维度:
ncks --fix_rec_dmn time out1.nc out2.nc
很遗憾,没有发生任何事情,结果还是一样。见下文:
dimensions:
lat = 60 ;
lon = 55 ;
time = 756 ;
我的问题,如何让UNLIMITED再次成为时间维度?
我从
找到了类似的问题和答案
我的错误,要使时间维度为 UNLIMITED,我必须使用 --mk_rec_dmn
而不是 --fix_rec_dmn
所以代码应该是:ncks --mk_rec_dmn time out1.nc out2.nc
在 netCDF3 文件中,变量只能将无限维度(如果有)作为其第一维度。 netCDF4放宽了这个限制,所以如果要记录维度在变化最快的维度以外的位置,必须保证输出的是netCDF4文件。
我有 1 个带有变量 ppt
和三维 ppt(time,lat,lon)
的 netCDF 文件。见下文:
dimensions:
time = UNLIMITED ; // (756 currently)
lon = 55 ;
lat = 60 ;
variables:
double time(time) ;
time:standard_name = "time" ;
time:long_name = "time" ;
time:units = "days since 1900-01-01 00:00:00" ;
time:calendar = "gregorian" ;
time:axis = "T" ;
double lon(lon) ;
lon:standard_name = "longitude" ;
lon:long_name = "longitude" ;
lon:units = "degrees_east" ;
lon:axis = "X" ;
double lat(lat) ;
lat:standard_name = "latitude" ;
lat:long_name = "latitude" ;
lat:units = "degrees_north" ;
lat:axis = "Y" ;
int ppt(time, lat, lon) ;
ppt:standard_name = "precipitation_amount" ;
ppt:long_name = "precipitation_amount" ;
ppt:units = "mm" ;
ppt:add_offset = 0. ;
ppt:scale_factor = 0.1 ;
ppt:_FillValue = -2147483648 ;
ppt:missing_value = -2147483648 ;
ppt:description = "Accumulated Precipitation" ;
ppt:dimensions = "lon lat time" ;
ppt:coordinate_system = "WGS84,EPSG:4326" ;
我想重新排序从 time,lat,lon
到 lat,lon,time
的维度。
我使用命令:ncpdq -a lat,lon,time in.nc out.nc
重新排序变量后,lat
维度变为 UNLIMITED
,这是错误的。 time
维度应该是 UNLIMITED
维度。
dimensions:
time = 756 ;
lon = 55 ;
lat = UNLIMITED ; // (60 currently)
...
...
int ppt(lat, lon, time) ;
然后我尝试使用下面的 ncks
命令修复变成 UNLIMITED
的 lat
维度:
ncks --fix_rec_dmn lat out.nc out1.nc
成功了,见下:
dimensions:
lat = 60 ;
lon = 55 ;
time = 756 ;
现在我想使用下面的 ncks 命令再次设置 UNLIMITED 时间维度:
ncks --fix_rec_dmn time out1.nc out2.nc
很遗憾,没有发生任何事情,结果还是一样。见下文:
dimensions:
lat = 60 ;
lon = 55 ;
time = 756 ;
我的问题,如何让UNLIMITED再次成为时间维度?
我从
找到了类似的问题和答案我的错误,要使时间维度为 UNLIMITED,我必须使用 --mk_rec_dmn
而不是 --fix_rec_dmn
所以代码应该是:ncks --mk_rec_dmn time out1.nc out2.nc
在 netCDF3 文件中,变量只能将无限维度(如果有)作为其第一维度。 netCDF4放宽了这个限制,所以如果要记录维度在变化最快的维度以外的位置,必须保证输出的是netCDF4文件。