2017-01-24 23 views
1

変数が必要以上の次元を持つxarrayデータセットがあります(たとえば、「緯度」変数と「経度」変数も時間とともに変化する3Dデータセット)。追加のディメンションを削除するにはどうすればよいですか?xarrayの一部の変数から次元を削除するデータセット

たとえば、以下のデータセットでは、「bar」はx軸に沿って一定の値を持つxおよびy軸に沿った2D変数です。 xのディメンションを 'bar'から削除しますが、 'foo'から削除するにはどうすればよいですか?

>>> ds = xr.Dataset({'foo': (('x', 'y'), np.random.randn(2, 3))}, 
        {'x': [1, 2], 'y': [1, 2, 3], 
        'bar': (('x', 'y'), [[4, 5, 6], [4, 5, 6]])}) 
>>> ds 
<xarray.Dataset> 
Dimensions: (x: 2, y: 3) 
Coordinates: 
    * x  (x) int64 1 2 
    * y  (y) int64 1 2 3 
    bar  (x, y) int64 4 5 6 4 5 6 
Data variables: 
    foo  (x, y) float64 -0.9595 0.6704 -1.047 0.9948 0.8241 1.643 

答えて

3

(インデックスを使用して)余分な次元を除去するための最も直接的な方法やや紛らわしいエラーメッセージで結果:問題は、あなたがxarrayでインデックス作成を行うときに、それは周りのインデックスを作成し続けていることである

>>> ds['bar'] = ds['bar'].sel(x=1) 
ValueError: dimension 'x' already exists as a scalar variable 

スカラー座標として座標:

>>> ds['bar'].sel(x=1) 
<xarray.DataArray 'bar' (y: 3)> 
array([4, 5, 6]) 
Coordinates: 
    x  int64 1 
    * y  (y) int64 1 2 3 
    bar  (y) int64 4 5 6 

これはしばしば有用であるが、この場合、スカラーは、非SCとインデックス配列の競合に'x'座標元のデータセットに設定しようとすると、アラー座標(および寸法)'x'が表示されます。したがって、変数をオーバーライドする代わりに、xarrayエラーが発生します。

この問題を回避するには、索引付け後にスカラー'x'を削除する必要があります。 xarrayの現在のバージョンでは、dropでこれを行うことができます(後からV0.9と)

>>> ds['bar'] = ds['bar'].sel(x=1).drop('x') 
>>> ds 
<xarray.Dataset> 
Dimensions: (x: 2, y: 3) 
Coordinates: 
    * x  (x) int64 1 2 
    * y  (y) int64 1 2 3 
    bar  (y) int64 4 5 6 
Data variables: 
    foo  (x, y) float64 -0.9595 0.6704 -1.047 0.9948 0.8241 1.643 
将来xarrayのバージョンで

を、あなたはインデックスを作成するときの座標をドロップすることができます例えば、drop=Trueを書き込むことによって、ds['bar'].sel(x=1, drop=True)

関連する問題