重新网格化 Python xarray 坐标



我有一些0.2度和1度分辨率的虚拟数据。我想将 foo 子采样到与 foo1 相同的比例。 有没有简单的方法以某种方式平均和重新网格我的纬度和长坐标?

import pandas as pd
import xarray as xr
import matplotlib.pyplot as plt
#Set at 0.2 degree grids ish
freq=20
lats=240
lons=1020
time=pd.date_range('2000-01',periods=freq,freq='Y')
data=np.random.rand(freq,lats,lons)
lat=np.linspace(-19.5,19.5,lats)
lon=np.linspace(120,290,lons)
foo = xr.DataArray(data, coords=[time, lat,lon], dims=['time', 'lat','lon'])
foo.sel(time='2005',method='nearest').plot()
plt.show()

#Set at 1 degree grids
freq1=20
lats1=40 #Factor of 6 difference
lons1=170
time1=pd.date_range('2000-01',periods=freq1,freq='Y')
data1=np.random.rand(freq1,lats1,lons1)
lat1=np.linspace(-19.5,19.5,lats1)
lon1=np.linspace(120,290,lons1)
foo1 = xr.DataArray(data1, coords=[time1, lat1,lon1], dims=['time', 'lat','lon'])

foo1.sel(time='2005',method='nearest').plot()
plt.show()

Xarray 可以线性插值纬度和经度,就好像它们是笛卡尔坐标一样(如上面的示例所示(,但这与正确的地理重新网格不同。为此,您可能想查看xesmf。

我决定最简单的方法是使用 foo1 网格进行插播。

因此:

foo2=foo.interp(lat=lat1).interp(lon=lon1)
foo2.sel(time='2005',method='nearest').plot()

应生成准确的子采样格网地图。

最新更新