<p>多亏了MASACR 99提供的文档链接和建议,我能够对xESMF包进行更多的挖掘,并从包作者(<a href="https://github.com/geoschem/GEOSChem-python-tutorial/blob/main/Chapter03_regridding.ipynb" rel="nofollow noreferrer">https://github.com/geoschem/GEOSChem-python-tutorial/blob/main/Chapter03_regridding.ipynb</a>)那里找到一个重采样方法的工作示例,我的问题通过两个更改得到了解决:</p>
<ol>
<li>我将方法从双线性改为保守(这还需要在输入数组中添加两个字段(纬度和经度的边界)</li>
<li>我没有直接将重采样的变量传递给重采样器,而是定义了两个固定的网格来创建重采样器,然后传递各个变量</li>
</ol>
<p>为了解决第一个变化,我创建了一个新函数来提供边界变量:</p>
<pre><code>def get_bounds(arr, gridSize):
lonMin = np.nanmin(arr["lon"].values)
latMin = np.nanmin(arr["lat"].values)
lonMax = np.nanmax(arr["lon"].values)
latMax = np.nanmax(arr["lat"].values)
sizeLon = len(arr["lon"])
sizeLat = len(arr["lat"])
bounds = {}
bounds["lon"] = arr["lon"].values
bounds["lat"] = arr["lat"].values
bounds["lon_b"] = np.linspace(lonMin-(gridSize/2), lonMax+(gridSize/2), sizeLon+1)
bounds["lat_b"] = np.linspace(latMin-(gridSize/2), latMax+(gridSize/2), sizeLat+1).clip(-90, 90)
return bounds
</code></pre>
<p>对于第二个更改,我修改了Regrider定义和应用程序,以使用静态定义的网格,然后将所需变量传递给重采样:</p>
<pre><code>regridder = xe.Regridder(get_bounds(gribs['dataset0.25'], 0.25), get_bounds(gribs['dataset0.5'], 0.5), 'conservative')
print(regridder)
ds2 = regridder(ds)
</code></pre>