将NumPy数组导出为NetCDF4文件后读取全零,问题出在哪?
问题:导出NumPy数组到NetCDF文件后读取全为零?
我尝试将一个简单的二维NumPy数组导出为.nc(NetCDF)文件,编写代码如下:
import numpy as np import netCDF4 as nc # Array example x = np.random.random((16,16)) # Create NetCDF4 dataset with nc.Dataset('data/2d_array.nc', 'w', 'NETCDF4') as ncfile: ncfile.createDimension('rows', x.shape[0]) ncfile.createDimension('cols', x.shape[1]) data_var = ncfile.createVariable('data', 'int32', ('rows', 'cols')) data_var = x
但再次读取该文件时,得到的数组全为零:
# Read file with nc.Dataset('data/2d_array.nc', 'r') as ncfile: array = ncfile.variables['data'][:]
请问我哪里操作出错了?
错误原因与修正方案
核心错误
你在创建NetCDF变量后,用data_var = x的方式赋值完全错误:这一步只是把Python变量data_var的引用从NetCDF变量对象改成了NumPy数组x,根本没有把数组数据写入到NetCDF文件的变量中。原NetCDF变量因为未被赋值,默认填充为零,所以读取时全是零。
额外注意点
你生成的数组x是float64类型(np.random.random()默认返回浮点数),但创建NetCDF变量时指定了int32类型,即便赋值方式正确,所有小于1的随机浮点数也会被强制转换为0,这也是读取全零的潜在诱因。
修正后的代码
import numpy as np import netCDF4 as nc # Array example x = np.random.random((16,16)) # Create NetCDF4 dataset with nc.Dataset('data/2d_array.nc', 'w', 'NETCDF4') as ncfile: # 创建维度 ncfile.createDimension('rows', x.shape[0]) ncfile.createDimension('cols', x.shape[1]) # 匹配数组的 dtype,或者显式指定需要的类型 data_var = ncfile.createVariable('data', x.dtype, ('rows', 'cols')) # 使用切片赋值,将NumPy数组写入NetCDF变量 data_var[:] = x
读取代码保持不变,现在读取的就是正确的随机数组数据了。
内容的提问来源于stack exchange,提问作者sermomon
相关产品推荐
相关产品推荐

