matlab读取EAR5数据——nc文件中的问题
1 问题描述
本人最近需要处理ERA5-Land中的温度、降水数据,以往读取nc文件时,常用的命令为:
info = ncinfo(filepath);
fid=netcdf.open(filepath);
temper_id=netcdf.inqVarID(fid,'t2m');
temper=netcdf.getVar(fid,temper_id,'double'); % 按double类型读取
读取出来的结果为(单位为:K):
考虑到温度肯定不可能数值这么大,而且发现读取出来的info中包含了scale_factor和add_offset,那么实际的数值应该为scale_factor*给出的数值+add_offset
2 ncread读取出来的NetCDF数据不需要自己修正scale_factor和add_offset等参数,它会自动修正
使用以下命令傻瓜式读取nc文件:
temper=ncread(pathname,'t2m');
读取出来的结果为(单位为:K):
这个结果就是正常的,说明1中方式读取出来的为原始数据。
3 给出的数值需要直接写代码读取,不要直接复制!!!
上图中给出的两个数值小数点后都是四位,直接复制也是只有四位,但是写代码读出来的数发现是double,小数点后有很多位。
如果利用1中介绍的方式读取原始数据,再复制只有四位小数的scale_factor和add_offset进行修正,计算出来的数值和2中ncread读取出来的有差别,虽然差别不大,如下(简略图):
如果写代码读取这两个数值,再对1中的原始数据进行处理,则可以得到ncread一样的结果。
4 python中nc文件读取的说明
使用python包读取nc文件时,一般和matlab的ncread命令一样,这些scale_factor和add_offset是自动进行修正了的,无需其他处理。