netCDF4 python生成的文件在Panoply中显示不佳
我正在为变量和属性创建带有预定义数据类型的netCDF文件,为此我使用netCDF4和python 我的最小示例如下所示:netCDF4 python生成的文件在Panoply中显示不佳,python,visualization,netcdf,Python,Visualization,Netcdf,我正在为变量和属性创建带有预定义数据类型的netCDF文件,为此我使用netCDF4和python 我的最小示例如下所示: from netCDF4 import Dataset import numpy as np root_grp = Dataset("test_single_band.nc" ,'w',format = 'NETCDF4') data_grp = root_grp.createGroup("data") data_grp.createDimension("num_pi
from netCDF4 import Dataset
import numpy as np
root_grp = Dataset("test_single_band.nc" ,'w',format = 'NETCDF4')
data_grp = root_grp.createGroup("data")
data_grp.createDimension("num_pixels", 3264)
data_grp.createDimension("num_lines", None)
measurement_data_grp = data_grp.createGroup("measurement_data")
measurement_data_grp.createVariable("band", "u2", \
("num_pixels","num_lines"), fill_value = np.uint16(8191))
measurement_data_grp["band"].long_name = "radiances"
measurement_data_grp["band"].units = "W m-2 sr-1 um-1"
measurement_data_grp["band"].scale_factor = np.float(0.085006105)
measurement_data_grp["band"].add_offset = np.float(7.61)
measurement_data_grp["band"].valid_min = np.uint16(0)
measurement_data_grp["band"].valid_max = np.uint16(8190)
data_max = 4830.
data_min = 30.
data = data_max*np.random.random((3264,3800)) + data_min
target = root_grp["data/measurement_data/band"]
target[:] = data.astype(target.dtype)
root_grp.close()
我的问题如下:这个脚本创建的文件被Panoply奇怪地显示出来:
i、 e.许多值显示为NaN
或大于有效值_max
,它们不是通过构造得到的。应该是这样的:
from netCDF4 import Dataset
import numpy as np
root_grp = Dataset("test_single_band.nc" ,'w',format = 'NETCDF4')
data_grp = root_grp.createGroup("data")
data_grp.createDimension("num_pixels", 3264)
data_grp.createDimension("num_lines", None)
measurement_data_grp = data_grp.createGroup("measurement_data")
measurement_data_grp.createVariable("band", "u2", \
("num_pixels","num_lines"), fill_value = np.uint16(8191))
measurement_data_grp["band"].long_name = "radiances"
measurement_data_grp["band"].units = "W m-2 sr-1 um-1"
measurement_data_grp["band"].scale_factor = np.float(0.085006105)
measurement_data_grp["band"].add_offset = np.float(7.61)
measurement_data_grp["band"].valid_min = np.uint16(0)
measurement_data_grp["band"].valid_max = np.uint16(8190)
data_max = 4830.
data_min = 30.
data = data_max*np.random.random((3264,3800)) + data_min
target = root_grp["data/measurement_data/band"]
target[:] = data.astype(target.dtype)
root_grp.close()
如果省略了valid\u max
的定义,或者valid\u max
设置为浮点数据类型,则Panoply会正确显示数据。使用valid\u range
不会改变任何东西
有什么地方出了问题吗 您的代码生成介于30和4860之间的随机数据值,但由于您指定了
比例因子
和添加偏移量
,这些值将存储为压缩数据。因此,在这种情况下,写入文件的值将是263[=(30-7.61)/0.085006105]和57082[=(4860-7.61)/0.085006105]之间的int
s
问题在于,当在netCDF文件中使用压缩数据与valid_min
和valid_max
规范结合使用时,约定是必须根据压缩值而不是未压缩值指定最小值和最大值。由于您指定的有效_max为8190,因此在8190和57082之间打包为int
的任何值在软件按照标准netCDF约定解包时将被视为无效
见:
是:
netCDF4
模块自动打包值。谢谢