由于比例因子和偏移量,导入 python 时 NetCDF 数据精度丢失

Loss of precision in NetCDF data when importing into python due to scale factor and offset

我有一个从数值模拟生成的 NetCDF 文件。 数据使用比例因子和偏移量存储,来自ncdump的示例如下:

    float lon(lon) ;
        lon:long_name = "longitude" ;
        lon:standard_name = "coordinates_i" ;
        lon:units = "degrees_east " ;
        lon:scale_factor = 9.308405e-06f ;
        lon:add_offset = 118.9597f ;

此数据应该从一个值平滑地变化到另一个值。

如果我使用 netcdf4 或 xarray e'g' data = xr.open_dataset('path/to/file') 导入它,那么当我查看坐标数据时,它们已经丢失并且它们不再平滑变化。而不是看起来像

如果我使用data = xr.open_dataset('path/to/file', mask_and_scale=False)导入,那么数据是平滑的

但这不是很有用,因为它不包含我需要的信息(未缩放)。 在我看来,存在精度问题,数据中的 'smoothness' 的小数位太高,已经丢失。

所以我的问题是,在使用比例因子和偏移量的同时,有没有一种方法可以提高导入时的精度,使数据保持平滑,并且不会变得逐步?也许使用 decimal 模块之类的?

或者,有没有办法分别导入存储的数据、比例因子和偏移量。然后将它们应用到我的 python 脚本中,在那里我可以提高精度?

到目前为止,我已经尝试了几种不同的方法,但似乎没有任何效果。 预先感谢您的帮助。

这是一个格式错误的变量。 scale_factoradd_offset 应该只注释打包的数据(例如,short),但是这个变量与那些打包属性具有相同的数字类型。

针对以下问题的扩展回答: 恕我直言,坐标(纬度、经度)应该很少打包。也就是说,要正确打包此示例中的坐标,可以使用指定的因子缩放和偏移坐标,然后将数组降级并保存为比本机 4 需要更少存储空间(例如 2 字节短裤)的任何数据类型-byte 浮点数据,那么 ncdump 将显示 short lon(lon) 并且其他所有内容都相同。 xarray 似乎对格式错误的数据感到困惑,并在输入时对其进行量化。