numpy 如何在python中使用xarray对栅格进行重分类

jfgube3f  于 2023-08-05  发布在  Python
关注(0)|答案(1)|浏览(81)

我有**LAI = xarray.DataArray 'band_data'(y:1460,x:1480)**的值从0到1.8,我想将光栅重新分类为四类:

0 - 0.4 = 1 
0.4 - 1 = 2 
1 - 1.4 = 3 
1.4 - 1.8 = 4

字符串
我试着:

LAI[np.where((LAI>1.4))]=4
LAI[np.where((LAI>1.0)&(LAI<1.4))]=3
LAI[np.where((LAI>0.4)&(LAI<1.0))]=2
LAI[np.where((LAI<0.4))]=1
LAI[xr.where((LAI>1.4),4)]
LAI[xr.where((LAI>1.0)&(LAI<1.4),3)]
LAI[xr.where((LAI>0.5)&(LAI<1.0),2)]
LAI[xr.where((LAI<0.5),1)]

的数据
但没有用
有没有可能用xarray来做呢?在哪里?
谢啦,谢啦

iyfjxgzm

iyfjxgzm1#

你不需要where,你可以自己使用一个布尔表达式,例如:

LAI[LAI > 1.4] = 4

字符串
但我也不会这样做,因为np.digitize()可以满足您的要求。它也适用于DataArrays,例如:

import xarray as xr

rng = np.random.default_rng(42)
data = 1.8 * rng.random(size=(10, 10))
da = xr.DataArray(data)
bins = [0, 0.4, 1.0, 1.4, 1.8]
np.digitize(da, bins=bins)


结果是:

array([[3, 2, 4, 3, 1, 4, 3, 4, 1, 2],
       [2, 4, 3, 4, 2, 2, 2, 1, 4, 3],
       [3, 2, 4, 4, 4, 1, 2, 1, 1, 3],
       [3, 4, 2, 2, 2, 1, 1, 2, 2, 3],
       [2, 4, 3, 2, 4, 4, 2, 2, 3, 1],
       [1, 1, 4, 3, 3, 4, 2, 3, 1, 1],
       [3, 2, 3, 3, 3, 2, 3, 2, 1, 2],
       [1, 2, 4, 2, 1, 2, 2, 3, 3, 4],
       [3, 2, 4, 1, 1, 1, 3, 2, 1, 2],
       [1, 3, 2, 2, 2, 3, 2, 1, 1, 4]])

相关问题