点击上方 蓝字关注我们
上一篇文章里我们学习了如何读写NetCDF文件,今天我们将更进一步,学习使用xarray,从零写入一个NetCDF文件。
xarray支持我们使用字典结构的数据,创建一个`xarray.Dataset`。我们所需要做的,只是依次定义维度、坐标、数据值和附加属性,将他们保存在一个字典(dict)里,然后再将字典转化为`xarray.Dataset`就可以了。然后,我们就可以使用上一篇文章提到的to_netcdf方法,将xarray.Dataset输出为netcdf文件。
下面是样例代码。其中nc文件的结构和属性信息来自于xarray tutorial中的air_temperature数据集;xarray中的变量为随机生成的数组。
import numpy as np
import xarray as xr
nc_dict = {
"dims": {"lat": 25, "time": 2920, "lon": 53},
"coords": {
"lat": {
"dims": ("lat",),
"attrs": {
"standard_name": "latitude",
"long_name": "Latitude",
"units": "degrees_north",
"axis": "Y",
},
"data":np.linspace(75,15,25,endpoint=True,dtype=np.float32),
},
"lon": {
"dims": ("lon",),
"attrs": {
"standard_name": "longitude",
"long_name": "Longitude",
"units": "degrees_east",
"axis": "X",
},
"data":np.linspace(200,330,53,endpoint=True,dtype=np.float32),
},
"time": {
"dims": ("time",),
"attrs": {"standard_name": "time", "long_name": "Time"},
"data":np.arange(np.datetime64('2013-01-01T00:00:00','s'),np.datetime64('2014-12-31T19:00:00','s'),np.timedelta64(6,'h'))
},
},
"data_vars": {
"air": {
"dims": ("time", "lat", "lon"),
"attrs": {
"long_name": "4xDaily Air temperature at sigma level 995",
"units": "degK",
"precision": 2,
"GRIB_id": 11,
"GRIB_name": "TMP",
"var_desc": "Air temperature",
"dataset": "NMC Reanalysis",
"level_desc": "Surface",
"statistic": "Individual Obs",
"parent_stat": "Other",
"actual_range": [185.16000366210938, 322.1000061035156],
},
"data":np.random.rand(2920,25,53).astype(np.float32),
}
},
"attrs": {
"Conventions": "COARDS",
"title": "4x daily NMC reanalysis (1948)",
"description": "Data is from NMC initialized reanalysis\n(4x/day). These are the 0.9950 sigma level values.",
"platform": "Model",
"references": "http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanalysis.html",
},
}
ds = xr.Dataset.from_dict(nc_dict)
ds.to_netcdf("air_temperature.nc")
往期推荐