Python xarray中的布尔索引

Python xarray中的布尔索引,python,numpy,python-xarray,Python,Numpy,Python Xarray,我有一些数组带有dims'time',lat',lon',还有一些数组只有'lat',lon'。我经常必须这样做,以便使用2d(lat-lon)掩码屏蔽时间相关数据: 当然,计算结果和预期的一样。如果y是二维横向数据,则其值将广播到x中的所有时间坐标: z = x + y 但索引并不像我预期的那样传播。我希望能够做到这一点,但它会引发ValueError:缓冲区的维度数错误: 最后,似乎xr.where确实按预期跨时间坐标广播掩码的值,但您不能以这种方式设置值 x_masked = x.whe

我有一些数组带有dims
'time',lat',lon'
,还有一些数组只有
'lat',lon'
。我经常必须这样做,以便使用2d(lat-lon)掩码屏蔽时间相关数据:

当然,计算结果和预期的一样。如果
y
是二维横向数据,则其值将广播到x中的所有时间坐标:

z = x + y
但索引并不像我预期的那样传播。我希望能够做到这一点,但它会引发ValueError:缓冲区的维度数错误:

最后,似乎
xr.where
确实按预期跨时间坐标广播掩码的值,但您不能以这种方式设置值

x_masked = x.where(mask)

那么,我在这里是否缺少一些东西,可以帮助使用缺少维度(需要广播)的布尔掩码设置值?我在顶部提供的选项真的是实现这一点的方法吗(在这种情况下,我可能只是使用标准的numpy数组…)

编辑:这个问题仍然在获得选票,但现在更容易了-参见


这里有些相关的问题:

目前最好的方法是将
.where
.fillna
相结合

valid = date_by_items.notnull()
positive = date_by_items > 0
positive = positive * 2
result = positive.fillna(0.).where(valid)
result

但是xarray正在进行更改,这将使其更加简洁-如果您感兴趣,请查看GitHub回购协议

谢谢您的确认,很高兴听到更新正在积极进行!这些更改是否存在于xarray 0.8.2中?您能否在问题中添加一些示例数据?这将使理解需求更加容易,并为回答者提供一些数据。
x_masked = x.where(mask)
valid = date_by_items.notnull()
positive = date_by_items > 0
positive = positive * 2
result = positive.fillna(0.).where(valid)
result