在 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 中打开并绘制它。
我正在尝试将导入的 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 中打开并绘制它。