使用NCO的ncrename重命名netCDF维度后坐标消失问题
问题:NCO ncrename重命名维度后原关联坐标消失?
我用NCO的ncrename工具把netCDF文件中的longitude、latitude和valid_time维度分别重命名为lon、lat和time,适配其他工具的要求。
原文件的维度与坐标信息:
Dimensions: (valid_time: 371, latitude: 212, longitude: 409) Coordinates: number int64 8B ... valid_time (valid_time) datetime64[ns] 3kB 1994-01-01 ... 2024-11-01 latitude (latitude) float64 2kB 55.4 55.3 55.2 55.1 ... 34.5 34.4 34.3 longitude (longitude) float64 3kB 46.5 46.6 46.7 46.8 ... 87.1 87.2 87.3 expver (valid_time) <U4 6kB ... Data variables: tp (valid_time, latitude, longitude) float32 129MB ...
执行命令:
ncrename -d latitude,lat -d longitude,lon -d valid_time,time
之后文件信息变成:
Dimensions: (time: 371, lat: 212, lon: 409) Coordinates: number int64 8B ... latitude (lat) float64 2kB ... longitude (lon) float64 3kB ... expver (time) <U4 6kB ... Dimensions without coordinates: time, lat, lon Data variables: valid_time (time) datetime64[ns] 3kB ... tp (time, lat, lon) float32 129MB ...
请问操作有误吗?为何原关联坐标会消失?
分析与解决
你的操作只修改了维度名称,没同步修改对应的坐标变量名称,这是问题的核心原因。
在netCDF规范里,维度和坐标变量是两个独立的概念:原文件中valid_time、latitude、longitude既是维度,也是与维度同名的坐标变量,二者是绑定关联的。你用-d参数仅修改了维度的名称,但坐标变量的名字还是原来的valid_time、latitude、longitude——现在这些坐标变量关联的维度变成了新的time、lat、lon,但工具默认会把与维度同名的变量识别为坐标,所以新维度time、lat、lon找不到同名的坐标变量,就会显示“Dimensions without coordinates”;而原来的坐标变量则被当成了普通数据变量(比如valid_time跑到了Data variables里)。
正确命令
需要同时重命名维度和对应的坐标变量,用-d改维度,-v改变量:
ncrename -d latitude,lat -v latitude,lat -d longitude,lon -v longitude,lon -d valid_time,time -v valid_time,time 你的输入文件名.nc 输出文件名.nc
执行后,维度和坐标变量的名称会统一为time、lat、lon,关联关系恢复正常,不会再出现坐标消失的问题,数据变量tp的维度也会正确对应新名称。
内容的提问来源于stack exchange,提问作者ᚠᚱᛇᚺᛖᚱᚱᛖ
相关产品推荐
相关产品推荐

