屏蔽 xarray 中的数据并更改 True 和 False 响应的值
Mask data in an xarray and changing values for both True and False responses
我有一个包含多天数据的 xarray DataArray。我可以在一个条件下使用 .where 函数来屏蔽它,但我想让所有超过某个值 1 的所有值和低于该值 0 的所有值。理想情况下,我还想确保任何 [=数据集中的 18=] 没有改变,但这不是必需的。
import numpy as np
import xarray as xr
dval = np.random.randint(5,size=[3,4,4])
x = [0,1,2,3]
y = [0,1,2,3]
time = ['2017-10-13','2017-10-12','2017-10-11']
a = xr.DataArray(dval,coords=[time,x,y],dims=['time','x','y'])
a = a.where(a>2,1,0) #ideally this would work as (condition,True val, False val)
这会导致 "cannot set 'other' if drop=True"
的 ValueError
如有任何帮助,我们将不胜感激。
a = a.where(a>2, 1, 0)
不会生效,因为DataArray.where
方法只支持设置other
。基本上你在做:a = a.where(a>2, other=1, drop=0)
.
相反,您应该使用 xarray 的第 3 个参数 xr.where
函数:
a= xr.where(a>2, 1, 0)
我有一个包含多天数据的 xarray DataArray。我可以在一个条件下使用 .where 函数来屏蔽它,但我想让所有超过某个值 1 的所有值和低于该值 0 的所有值。理想情况下,我还想确保任何 [=数据集中的 18=] 没有改变,但这不是必需的。
import numpy as np
import xarray as xr
dval = np.random.randint(5,size=[3,4,4])
x = [0,1,2,3]
y = [0,1,2,3]
time = ['2017-10-13','2017-10-12','2017-10-11']
a = xr.DataArray(dval,coords=[time,x,y],dims=['time','x','y'])
a = a.where(a>2,1,0) #ideally this would work as (condition,True val, False val)
这会导致 "cannot set 'other' if drop=True"
的 ValueError如有任何帮助,我们将不胜感激。
a = a.where(a>2, 1, 0)
不会生效,因为DataArray.where
方法只支持设置other
。基本上你在做:a = a.where(a>2, other=1, drop=0)
.
相反,您应该使用 xarray 的第 3 个参数 xr.where
函数:
a= xr.where(a>2, 1, 0)