我有一个xarray数据数组,它被定义为,(参见link)
xarray.DataArray (y:3,x:5)
array([[ 2., 1., 2., 0., -2.],
[-4., nan, 2., nan, -2.],
[nan, nan, 1., nan, nan]])
Coordinates:
y (y)int64 -1 0 1
x (x)int64 0 1 4 9 16
字符串
如果我想在x维度上找到沿着第一次出现的大于0的值,我可以使用类似(array>0).idxmax(dim='x')
的命令,它将返回
xarray.DataArray 'x' (y: 3)
array([0, 4, 0])
Coordinates:
y (y)int64 -1 0 1
型
当我将阈值从0更改为4时,即(array>4).idxmax(dim='x')
,dataarray的预期结果是[np.nan, np.nan, np.nan]
,因为数组中没有大于4的值。然而,它返回[0,0,0]
。
我想知道是否有任何方法来解决我的难题,即返回[np.nan, np.nan, np.nan]
而不是[0,0,0]
先谢了。
2条答案
按热度按时间tquggr8v1#
您可以尝试使用
.where
将False
值替换为nan
:字符串
打印:
型
m2xkgtsf2#
我认为你几乎不能改变结果。它不返回nan的原因是它提供了正确的结果。你交给函数idxmax的是一个只包含零的布尔数组(False=0)。所以函数将返回最大值的第一个位置,在本例中是0在位置0。
你可以做的是把这两件事分开:
1.查找包含大于阈值的值的行。如果没有,您已经有了失败状态,可以手动返回NaN。
1.只将这些行给予给函数,以便只获得这些行的结果。