python - 为什么我创建的 NETcdf 数据被屏蔽了?
问题描述
我用一些数据创建了一个 netcdf 文件,当我在另一个脚本中导入数据时,它被屏蔽了:
>>> type(Data[:])
<class 'numpy.ma.core.MaskedArray'>
这是我创建数据的方式:
# Put in a grid
print 'Putting the data in a grid...'
LatRange = range( int(min(Lat)), int(max(Lat)), 1 )
LonRange = np.arange( int(min(Lon)), int(max(Lon)), 1 )
dRange = range(0,200,10) + range(200,4000,100)
dateRange = np.arange( float(min(Dates).year)+min(Dates).month/12., float(max(Dates).year)+max(Dates).month/12., 1./12. )
dataset = Dataset('gridded_data/DataAveraged.nc','w', format='NETCDF4_CLASSIC')
zD = dataset.createDimension('zD',len(dRange))
latD = dataset.createDimension('latD',len(LatRange))
lonD = dataset.createDimension('lonD',len(LonRange))
timeD = dataset.createDimension('timeD',len(dateRange))
tempAve = dataset.createVariable('tempAve', np.float32, ('zD','latD','lonD','timeD'), fill_value=-9999)
tempAve.units = 'psu'
tempAve[:] = Tgrid_ave
其中 Tgrid_ave 是一个 numpy 数组。
然后,我以这种方式在另一个脚本中导入数据:
dataset = Dataset('gridded_data/DataAveraged.nc', 'r')
LatRange = dataset.variables['lat'][:]
LonRange = dataset.variables['lon'][:-1]
Tgrid_ave = dataset.variables['tempAve']
我的 Lat 和 Lon 数据没有被屏蔽,但我的 Tgrid_ave 数据被屏蔽了。
我怎样才能避免这种情况!?
解决方案
netCDF4 库用于返回掩码数组或常规 Numpy 数组,具体取决于您从数组(或数组切片)请求的数据是否包含填充值。这是不幸的行为,但它似乎已在PR 787中得到修复。所以我认为,从 1.4 版开始,如果定义了填充值(我还没有测试过),默认行为总是返回一个掩码数组。
无论如何,您可以通过将set_auto_mask设置 为False
.
推荐阅读
- assembly - 如何在Assembly(MIPS)中计算字符串中的位数
- javascript - 将 unirest 'GET' 请求转换为 axios
- c - 使用宏定义结构和函数,如何停止多个定义
- java - Firebase 网络问题?
- android - 尝试将图像上传到 Firebase 存储
- mysql - 如何在 UNION 查询中的两个表中使用 where 条件?
- javascript - 如何使用 webpack4 注入脚本标签
- python-3.x - 如何从应用引擎 python 3 Django 使用谷歌存储
- django - 如何检查是否是第一次使用 Django 中的自定义主键创建对象?
- python - 使用python在相邻字符之间创建一个空格