更改 netCDF 文件中的 _FillValue
Change _FillValue in netCDF file
是否有 python netCDF4 command/example 来更改 netCDF 文件中的全局元数据 _FillValue?我曾尝试替换 netCDF 文件中的所有 -ve 值,但在设置 _FillValue 属性之前,这不起作用
我不相信 python netCDF4 有这方面的特定功能,但 NCO's ncatted 是完成此任务的理想工具。
来自文档:
将缺失值从 IEEE NaN 值更改为普通 IEEE 数字,如 1.0e36:
ncatted -a _FillValue,,m,f,1.0e36 in.nc
您也可以使用 cdo 将缺失的条目设置为另一个值,例如 999.0
cdo setmisstoc,999.0 in.nc out.nc
但是,根据您的问题描述,您似乎实际上不需要更改 _Fillvalue 的值,而是希望将负值设置为缺失值。您可以通过使用 cdo 函数“set range to miss”
来实现这一点
cdo setrtomiss,-1e8,0 in.nc out.nc
第一个参数是一个很大的负数,它小于数据集中的最小值。我在上面的答案中假设相关字段已经设置了值,否则您需要添加它,例如
cdo setattribute,field@_FillValue=-1.e32 infile outfile
一般来说,定义“全局”_FillValue 似乎会导致问题(例如,参见 https://github.com/Unidata/netcdf-c/issues/458),而且无论如何,如果您有整数和浮点字段的组合,则无法应用定义默认的浮点填充到所有领域。我个人认为,最好的做法是分别为每个字段定义一个填充值,并在可能的情况下为每种数据类型使用默认值。
可以使用 cdo 包直接从 python 调用 cdo 命令。
_FillValue 特定于变量。有了Python NetCDF4库,我明白只能在创建变量的时候指定。可以使用 CDO 更改 _FillValue。这就是我自己更改 _FillValue 的方式:
cdo -setattribute,Band1@_FillValue=-1.0 infile.nc outfile.nc
是否有 python netCDF4 command/example 来更改 netCDF 文件中的全局元数据 _FillValue?我曾尝试替换 netCDF 文件中的所有 -ve 值,但在设置 _FillValue 属性之前,这不起作用
我不相信 python netCDF4 有这方面的特定功能,但 NCO's ncatted 是完成此任务的理想工具。
来自文档:
将缺失值从 IEEE NaN 值更改为普通 IEEE 数字,如 1.0e36:
ncatted -a _FillValue,,m,f,1.0e36 in.nc
您也可以使用 cdo 将缺失的条目设置为另一个值,例如 999.0
cdo setmisstoc,999.0 in.nc out.nc
但是,根据您的问题描述,您似乎实际上不需要更改 _Fillvalue 的值,而是希望将负值设置为缺失值。您可以通过使用 cdo 函数“set range to miss”
来实现这一点cdo setrtomiss,-1e8,0 in.nc out.nc
第一个参数是一个很大的负数,它小于数据集中的最小值。我在上面的答案中假设相关字段已经设置了值,否则您需要添加它,例如
cdo setattribute,field@_FillValue=-1.e32 infile outfile
一般来说,定义“全局”_FillValue 似乎会导致问题(例如,参见 https://github.com/Unidata/netcdf-c/issues/458),而且无论如何,如果您有整数和浮点字段的组合,则无法应用定义默认的浮点填充到所有领域。我个人认为,最好的做法是分别为每个字段定义一个填充值,并在可能的情况下为每种数据类型使用默认值。
可以使用 cdo 包直接从 python 调用 cdo 命令。
_FillValue 特定于变量。有了Python NetCDF4库,我明白只能在创建变量的时候指定。可以使用 CDO 更改 _FillValue。这就是我自己更改 _FillValue 的方式:
cdo -setattribute,Band1@_FillValue=-1.0 infile.nc outfile.nc