6

landcover タイプの dataArray があります。リストにある特定の値をマスクしたいと思います。複数の条件で xr.where() 関数を使用することは可能ですか?

import numpy as np
import xarray as xr
a = xr.DataArray(np.arange(25).reshape(5, 5), dims=('x', 'y'))
print a
LC = [10,12,19]
a.where((a == LC[0]) | (a == LC[1]))

これにより、次のことが得られます。

 <xarray.DataArray (x: 5, y: 5)>
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
Coordinates:
  * x        (x) int64 0 1 2 3 4
  * y        (y) int64 0 1 2 3 4

<xarray.DataArray (x: 5, y: 5)>
array([[ nan,  nan,  nan,  nan,  nan],
       [ nan,  nan,  nan,  nan,  nan],
       [ 10.,  nan,  12.,  nan,  nan],
       [ nan,  nan,  nan,  nan,  nan],
       [ nan,  nan,  nan,  nan,  nan]])
Coordinates:
  * x        (x) int64 0 1 2 3 4
  * y        (y) int64 0 1 2 3 4

上記は 2 つの土地被覆の値に対して機能しますが、30 のタイプに対してこれを行うのは面倒です。より良い方法はありますか?

4

1 に答える 1

6
xr.DataArray(np.in1d(a, LC).reshape(a.shape),
             dims=a.dims, coords=a.coords)

それをする必要があります:

<xarray.DataArray (x: 5, y: 5)>
array([[False, False, False, False, False],
       [False, False, False, False, False],
       [ True, False,  True, False, False],
       [False, False, False, False,  True],
       [False, False, False, False, False]], dtype=bool)
Coordinates:
  * x        (x) int64 0 1 2 3 4
  * y        (y) int64 0 1 2 3 4
于 2016-11-11T21:26:50.097 に答える