2016-11-10 9 views
2

私はlandcoverタイプのdataArrayを持っています。私はリストにある特定の値をマスクしたい。複数の条件でxr.where()関数を使用することは可能ですか?複数の条件を指定したxarray.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
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