2016-11-10 1 views
2

landcover 유형이있는 dataArray가 있습니다. 나는 목록에있는 특정 값을 가리고 싶다. 여러 조건과 함께 xr.where() 함수를 사용할 수 있습니까? 이 개 토지 피복 값에 대한여러 조건이 포함 된 xarray.where()

<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 

위의 작동하지만 30 개 종류에 대해이 작업을 수행하기 위해 지루한 :

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])) 

준다. 더 좋은 방법이 있습니까?

답변

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