暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

利用xesmf对网格数据进行regrid

气海无涯 2021-09-02
3228

对比不同分辨率的网格数据时,通常需要将数据插值到相同网格。有很多工具可以实现此功能,本文主要讲一下如何利用xesmf对网格数据进行regrid。

工具安装就不说了,首先导入所需要的库:

import xarray as xr
import xesmf as xe
import numpy as np

然后获取CMIP5的月表面温度数据:

url = 'http://dapds00.nci.org.au/thredds/dodsC/rr3/CMIP5/output1/CSIRO-BOM/ACCESS1-3/historical/mon/atmos/Amon/r1i1p1/latest/tas/tas_Amon_ACCESS1-3_historical_r1i1p1_185001-200512.nc'
ds = xr.open_dataset(url)

执行如下语句可以得到原始数据的经纬度网格分辨率:

(ds['lat'].max() - ds['lat'].min())/(ds['lat'].count()-1.)

(ds['lon'].max() - ds['lon'].min())/(ds['lon'].count()-1.)

原始的数据分辨率为 1.25 x 1.875 度,然后将网格插值为2.5x2.5度。可以直接利用 xesmf 的相关函数生成网格:

ds_out = xe.util.grid_2d(-180.0180.02.5-90.090.02.5)

下一步创建 regridder
,默认情况下不会保存所使用的权重信息。注意:由于这里所使用的是全球数据,periodic=True
是为了保证在沿着中心经度时不会出现空白间隙。

regridder = xe.Regridder(ds, ds_out, 'bilinear', periodic=True)

下一步就是进行插值操作了:

tas_25deg = regridder(ds['tas'])

可以绘图对比一下结果:

ds['tas'].isel(time=0).plot()
tas_25deg.isel(time=0).plot()

插值前后温度分布

如果需要频繁的对相同网格分辨率的数据进行插值,可以重复利用权重信息以节省时间。通过指定文件名保存权重信息:

regridder_save_weights = xe.Regridder(ds,ds_out,'bilinear',periodic=True,filename='bilinear_145x192_180x360_peri.nc')

然后使用保存的权重信息构建 regridder

regridder_reuse_weights = xe.Regridder(ds,ds_out,'bilinear',periodic=True,reuse_weights=True,filename='bilinear_145x192_180x360_peri.nc')

xesmf支持多种投影方式的网格插值操作,详细信息可以前往官方文档查看。


END


 往期推荐 

大气科学中的机器学习应用

“最新”AI气象应用论文和源码合集

气象常用数据格式的一键可视化工具

这可能是最强大的NetCDF文件处理工具

气象人开发的高级科学绘图库Proplot!

多雷达三维风场反演和反射率雷达组网产品

气象AI|面向AI研究的天气和气候公开数据集

xarray系列|教你更高效的处理NetCDF格式数据

人工智能和机器学习在天气和气候模式方面的新机遇

ECMWF发布未来十年战略规划,包括机器学习路线图

文章转载自气海无涯,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论