2016-08-07 10 views
1

緯度/経度のグリッド解像度が異なる2つの異なるxarrayデータセットがあります。私はより高い解像度で1つのxarrayと同じ解像度に低い解像度で1つのxarrayをregridしたい。いくつかの例が見つかりました(例:http://earthpy.org/interpolation_between_grids_with_basemap.html)が、私にとってはうまくいきません。ここで私はテストのために作られたという一例です:Basemapを使用した2つのxarrayデータセット間の補間

import numpy as np 
import xarray as xray 
import mpl_toolkits.basemap 

var1=xray.DataArray(np.random.randn(len(np.linspace(40.5,49.5,10)),len(np.linspace(-39.5,-20.5,20))),coords=[np.linspace(40.5,49.5,10), np.linspace(-39.5,-20.5,20)],dims=['lat','lon']) 

(xlon, xlat)=np.meshgrid(np.linspace(-39.875,-20.125,80),np.linspace(40.125,49.875,40)) 
var2=xray.DataArray(-xlon**2+xlat**2,coords=[np.linspace(40.125,49.875,40),np.linspace(-39.875,-20.125,80)],dims=['lat','lon']) 

mpl_toolkits.basemap.interp(var1,var1.lon,var1.lat,var2.lon,var2.lat,checkbounds=False,masked=False,order=0) 

私はエラーを以下の取得:

ValueError: xout and yout must have same shape!

スクリーンショット:basemap.interp()があることをXOUTとYOUTを see screenshot

を必要としません同じ形?だからvar2は正方形である必要がありますか?これは私のデータセットでは決してそうではありません!どうすればvar1をvar2と同じ解像度にすることができますか?

注:再分割後、var2に関するいくつかの条件を考慮して、var1のサブサンプルを行いたいとします。例:

var1_subset = var1.where(var2>1000) 

したがって、補間中にグリッドポイントの損失を最小限に抑えたいと考えています。

答えて

1

basemap.interpは、XOUTとYOUT出力nlonsとnlatsの数又は数が同じである場合にのみ動作するが同じである、

同じ長さ出力nlatsとnlonsを生成し、それを後でサブセットではない理由。例えば

:ここ

import numpy as np 
import xarray as xray 
import mpl_toolkits.basemap 
var1=xray.DataArray(np.random.randn(len(np.linspace(40.5,49.5,10)),len(np.linspace(-39.5,-20.5,20))),coords=[np.linspace(40.5,49.5,10), np.linspace(-39.5,-20.5,20)],dims=['lat','lon']) 

(xlon,xlat)=np.meshgrid(np.linspace(-39.875,20.125,80),np.linspace(40.125,49.875,80)) 
var2=xray.DataArray(-xlon**2+xlat**2,coords[np.linspace(40.125,49.875,80),np.linspace(-39.875,-20.125,80)],dims=['lat','lon']) 
mpl_toolkits.basemap.interp(var1,var1.lon,var1.lat,var2.lon,var2.lat,checkbounds=False,masked=False,order=0) 

はxarrayを持つ別のクールなトリックです。

lonreg=var1.groupby_bins('lon',np.linspace(-39.875,20.125,80)).mean(dim='lon') 

regridded=lonreg.groupby_bins('lat',np.linspace(-39.5,20.5,20)).mean(dim='lat') 

あなたは加重平均再グリッドをしたい場合は、それが地域のために、これはGROUPBYオブジェクトに重みとSUM関数を使用して再グリッド平均拡張することは容易です。

関連する問題