3

nl4124 個の測定値を含む配列があるとします。それぞれは、測定が行われた場所を指定する( lat, ) カップルに関連付けられています。lonこれらの位置はグリッド化されていません。つまり、等間隔の値に整列していません。

In [51]: whos
Variable   Type         Data/Info
---------------------------------
lat        ndarray      4124: 4124 elems, type `float32`, 16496 bytes
lon        ndarray      4124: 4124 elems, type `float32`, 16496 bytes
nl         ndarray      4124: 4124 elems, type `int16`, 8248 bytes

とを座標としてnl指定して、 の DataArray を作成します。latlon

nl = xr.DataArray(nl, coords={'lon':(['time'], lon), 'lat':(['time'], lat)}, dims=['time'])

たとえば、これらの値を経度または緯度のビンにグループ化して、それらを操作できることを知っています。

nl_avg_lon = nl.groupby_bins('lon', np.r_[-180:190:10]).mean()
nl_avg_lat = nl.groupby_bins('lat', np.r_[-90:90:10]).mean()

私がやりたいのは、経度 x 緯度の 2D ビンの値をグループ化することです。これにより、結果をマップとして表示できます。groupby_bins ではそれができないと思いますが、別の解決策はありますか?

例で更新:

これは、適切なnumpyで私がやりたいことをする方法です:

latbins = np.r_[-90:100:10]
lonbins = np.r_[-180:190:10]
nsamples, xx, yy = np.histogram2d(lon, lat, bins=(lonbins, latbins))
nl_sum, xx, yy = np.histogram2d(lon, lat, bins=(lonbins, latbins), weights=nl)
nl_avg = nl_sum / nsamples

xarray とダッシュの統合を維持するために numpy に頼るのは避けたいと思います。

4

2 に答える 2

2

複数の次元によるグループ化は現在取り組んでいますが、xarray ではまだ利用できません。

それまでの間、いくつかの非常に許容できる回避策があります。たとえば、lat&の連結である 3 番目の座標を作成する場合lon、その座標でグループ化してセットlat x lonビンを生成できます。

簡単な例を次に示します。

In [12]: da=xr.DataArray(np.random.rand(3,3,2), dims=['lat','lon','time'])

In [13]: da
Out[13]: 
<xarray.DataArray (lat: 3, lon: 3, time: 2)>
array([[[ 0.69092373,  0.94961267],
        [ 0.74086633,  0.22628054],
        [ 0.08215398,  0.16806347]],

       [[ 0.67699002,  0.86242477],
        [ 0.54688503,  0.57882117],
        [ 0.21120849,  0.68743872]],

       [[ 0.43816928,  0.57682212],
        [ 0.10402045,  0.78923986],
        [ 0.53284326,  0.23705761]]])
Coordinates:
  * lat      (lat) int64 0 1 2
  * lon      (lon) int64 0 1 2
  * time     (time) int64 0 1

In [14]: da.stack(latlon=['lat','lon'])
Out[14]: 
<xarray.DataArray (time: 2, latlon: 9)>
array([[ 0.69092373,  0.74086633,  0.08215398,  0.67699002,  0.54688503,
         0.21120849,  0.43816928,  0.10402045,  0.53284326],
       [ 0.94961267,  0.22628054,  0.16806347,  0.86242477,  0.57882117,
         0.68743872,  0.57682212,  0.78923986,  0.23705761]])
Coordinates:
  * time     (time) int64 0 1
  * latlon   (latlon) object (0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) ...

In [15]: da.stack(latlon=['lat','lon']).groupby('latlon').mean()
Out[15]: 
<xarray.DataArray (latlon: 9)>
array([ 0.8202682 ,  0.48357344,  0.12510872,  0.76970739,  0.5628531 ,
        0.44932361,  0.5074957 ,  0.44663016,  0.38495044])
Coordinates:
  * latlon   (latlon) object (0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) ...
于 2016-11-08T01:14:44.427 に答える