Py学习  »  Python

python读写NETCDF文件(进阶版本)

happy科研 • 3 年前 • 385 次点击  

点击上方 蓝字关注我们



上一篇文章里我们学习了如何读写NetCDF文件,今天我们将更进一步,学习使用xarray,从零写入一个NetCDF文件。


xarray支持我们使用字典结构的数据,创建一个`xarray.Dataset`。我们所需要做的,只是依次定义维度、坐标、数据值和附加属性,将他们保存在一个字典(dict)里,然后再将字典转化为`xarray.Dataset`就可以了。然后,我们就可以使用上一篇文章提到的to_netcdf方法,将xarray.Dataset输出为netcdf文件。


下面是样例代码。其中nc文件的结构和属性信息来自于xarray tutorial中的air_temperature数据集;xarray中的变量为随机生成的数组。

import numpy as npimport xarray as xr
# 新建字典nc_dict = {    # nc文件的维度信息 "dims": {"lat": 25, "time": 2920, "lon": 53},    # nc文件的维度信息的坐标信息(lat,lon,time等) "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')) }, }, # nc文件中的变量 "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), } },    # nc文件的全局属性信息 "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", },}
# 使用`from_dict`,将字典转化为xr.Dataset对象ds = xr.Dataset.from_dict(nc_dict)
# 将xr.Dataset对象保存为nc文件ds.to_netcdf("air_temperature.nc")


往期推荐


点个在看你最好看

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/121528
 
385 次点击