使用NCO拼接TerraClimate逐年netCDF数据出现取值异常问题求解
问题原因
你现有流程出错的核心原因是操作顺序不符合NCO工具的拼接逻辑:
- 当你先把维度重排为
lat,lon,time,再将time设为记录维度后,ncrcat拼接时无法正确识别非首位置的记录维度的变量切片映射关系,尤其是原始pet变量为带scale_factor、add_offset的压缩存储类型时,拼接过程中缩放参数传递错误,最终仅写入维度元数据、实际数值全部为填充值,所以输出文件体积远小于预期。
最优解决方法
你之前已经通过cdo mergetime得到了数据正常的100GB拼接文件,直接对该文件做维度重排即可,无需重复处理单文件再拼接,仅需一行命令:
# NCO方案重排维度 ncpdq -a lat,lon,time 你之前拼好的正常文件.nc -O TerraClimate_pet_1958_2020.nc # 也可以用CDO方案完成重排,效果一致 cdo permuteaxis,2,3,1 你之前拼好的正常文件.nc TerraClimate_pet_1958_2020.nc
如果需要适配Windows分析工具的读取要求,避免压缩属性识别异常,可以加解包参数直接输出为float类型:
ncpdq --unpack -a lat,lon,time 你之前拼好的正常文件.nc -O TerraClimate_pet_1958_2020.nc
如果你必须走单文件处理再拼接的流程,按以下顺序修正操作:
- 先对所有单文件将
time设为记录维度,无需提前重排维度:
for fl in *.nc; do ncks -O --mk_rec_dmn time $fl $fl; done
- 拼接所有文件得到全时间序列结果:
ncrcat -h TerraClimate_*.nc -O TerraClimate_pet_1958_2020_tmp.nc
- 对拼接好的完整文件执行维度重排:
ncpdq -a lat,lon,time TerraClimate_pet_1958_2020_tmp.nc -O TerraClimate_pet_1958_2020.nc
内容的提问来源于stack exchange,提问作者user97103
相关产品推荐
相关产品推荐

