在 netcdf4 中写入 nan 的 float64

float64 written to nan in netcdf4

我正在尝试将导入的 csv 文件中的数据填充到 netcdf 文件中,数据为 0 或 1.39e-14 格式。根据 运行 代码,netcdf 文件已创建,但它具有 NaN 值作为 panoply 显示的错误消息。

import numpy as np

import netCDF4

ncfile = netCDF4.Dataset('C:/data/new1.nc',mode='w',format='NETCDF4_CLASSIC')

lat_dim = ncfile.createDimension('lat', 361) # latitude axis

lon_dim = ncfile.createDimension('lon', 721) # longitude axis


lat = ncfile.createVariable('lat', np.float32, ('lat',))

lat.units = 'degrees_north'

lat.long_name = 'latitude'

lon = ncfile.createVariable('lon', np.float32, ('lon',))

lon.units = 'degrees_east'

lon.long_name = 'longitude'

emission = ncfile.createVariable('emission',np.float64,('lat','lon')) 

emission.units = 'tonn' 

emission.standard_name = 'tonn/month' 

from numpy import genfromtxt

my_data = genfromtxt('2100.csv', delimiter=',')   

lat[:]=-90. + (.5)*np.arange(361)   

lon[:]= -180 + (.5)*np.arange(721)

emission[:,:] = my_data

ncfile.close

上面我的评论的插图,最好使用 with 语法。

import numpy as np
from netCDF4 import Dataset

file = 'D:/test/new1.nc'
with Dataset(file, mode='w', format='NETCDF4_CLASSIC') as ncfile:
    lat_dim = ncfile.createDimension('lat', 361) # latitude axis
    lon_dim = ncfile.createDimension('lon', 721) # longitude axis
    lat = ncfile.createVariable('lat', np.float32, ('lat',))
    lat.units = 'degrees_north'
    lat.long_name = 'latitude'
    lon = ncfile.createVariable('lon', np.float32, ('lon',))
    lon.units = 'degrees_east'
    lon.long_name = 'longitude'
    lat[:]=-90. + (.5)*np.arange(361)   
    lon[:]= -180 + (.5)*np.arange(721)
    emission = ncfile.createVariable('emission',np.float64,('lat','lon')) 
    emission.units = 'tonn' 
    emission.standard_name = 'tonn/month' 
    emission[:,:] = np.zeros((len(lat_dim),len(lon_dim))) # fake data

正在检查输入,例如与

with Dataset(file, mode='r') as d:
    v = np.array(d.variables['emission'][:,:])

...给了我

In [58]: np.any(~np.isfinite(v))
Out[58]: False

所以一切都很好,只是有限的值。当然,我也可以在 Panoply 中打开并绘制它。