社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

happy科研 • 2 年前 • 257 次点击  

点击上方 蓝字关注我们



上一篇文章里我们学习了如何读写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
 
257 次点击