netcdf4 FillValue、缺少的value和python掩码数组fill value之间的差异

netcdf4 FillValue、缺少的value和python掩码数组fill value之间的差异,python,netcdf4,masked-array,Python,Netcdf4,Masked Array,我有netcdf文件,其中_FillValue和/或missing value以各种组合设置(例如,作为float、string或not,通常作为-999./'-999')。我正在处理这些文件并再次保存它们,希望在输出文件中正确且一致地设置填充值。我的问题是: 1) 使用_FillValue或缺少_value,或两者都使用,区别是什么 2) 填充值应该是哪种类型,关于填充值的最佳实践是什么-999似乎可能与实际数据相混淆 3) 在我的屏蔽数组中,netdcf fill值与fill_值是如何组合的

我有netcdf文件,其中_FillValue和/或missing value以各种组合设置(例如,作为float、string或not,通常作为-999./'-999')。我正在处理这些文件并再次保存它们,希望在输出文件中正确且一致地设置填充值。我的问题是:

1) 使用_FillValue或缺少_value,或两者都使用,区别是什么

2) 填充值应该是哪种类型,关于填充值的最佳实践是什么-999似乎可能与实际数据相混淆

3) 在我的屏蔽数组中,netdcf fill值与fill_值是如何组合的(它似乎默认为10^20)?似乎有两种方法可以纠正同一件事

4) 在处理数据时,我还收到一条警告:“UserWarning:warning:missing_value未使用,因为它无法安全地转换为变量数据类型”,并且_FillValue会自动设置为大约10^36。所以我认为我的-999缺失值确实是个坏主意

我正在使用python 3.7和netcdf4


谢谢

要回答第2点,每种类型(浮点、整数等)都有一个默认缺失值,该值可通过所使用语言的特定netcdf模块获得

举个例子,如果您使用的是Fortran90(或更高版本),那么一旦加载了netcdf模块,就可以使用预定义变量访问双精度浮点变量的默认缺失值

NF90_FILL_DOUBLE
相反,在python3中,您特别询问了它,它有点复杂,因为它取决于您使用哪个包来处理NETCDF。但是,如果使用netCDF4包(现在相当标准),则可以通过以下方式查看默认缺失值:

import netCDF4
netCDF4.default_fillvals
{'S1': '\x00', 'i1': -127, 'u1': 255, 'i2': -32767, 'u2': 65535, 'i4': -2147483647, 'u4': 4294967295, 'i8': -9223372036854775806, 'u8': 18446744073709551614, 'f4': 9.969209968386869e+36, 'f8': 9.969209968386869e+36}

今后,尽量避免在同一篇文章中问多个问题-最好将问题分成几个单独的问题:-)