【发布时间】:2020-05-02 03:05:35
【问题描述】:
我有一个通过数值模拟生成的 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) 导入,那么数据是平滑的
但这不是很有用,因为它不包含我需要的信息(未缩放)。 在我看来,存在精度问题,即数据中的“平滑度”处于太高的小数位并且已经丢失。
所以我的问题是,在使用比例因子和偏移量的同时,有没有办法在导入时提高精度,以使数据保持平滑,而不是逐步进行?也许使用decimal 模块或其他什么?
或者,有没有办法分别导入存储的数据、比例因子和偏移量。然后将它们应用到我的 python 脚本中,在那里我可以执行更好的精度?
到目前为止,我已经尝试了几种不同的方法,但似乎没有任何效果。 提前感谢您的帮助。
【问题讨论】:
-
scale_factor和add_offset可以从 DataArrayencoding属性中检索。在您的情况下,我会尝试data.lon.encoding使用mask_and_scale=False检索这些值。
标签: python python-3.x precision netcdf python-xarray