xarray中的布尔索引

jmi*_*loy 9 python numpy python-xarray

我有一些昏暗的数组,'time', 'lat', 'lon'有些只是'lat', 'lon'。为了使用2d(纬度)掩码来掩盖时间相关的数据,我经常必须这样做:

x.data[:, mask.data] = np.nan
Run Code Online (Sandbox Code Playgroud)

当然,计算会按预期进行广播。如果y是2d纬度数据,则将其值广播到x中的所有时间坐标:

z = x + y
Run Code Online (Sandbox Code Playgroud)

但是索引不会像我期望的那样广播。我希望能够执行此操作,但是会引发ValueError:缓冲区的维数错误

x[mask] = np.nan
Run Code Online (Sandbox Code Playgroud)

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

x_masked = x.where(mask)
Run Code Online (Sandbox Code Playgroud)

因此,在这里我缺少什么可以使用缺少尺寸(并且需要广播)的布尔掩码方便设置值的方法吗?我在顶部提供的选项确实是执行此操作的方式吗(在这种情况下,我不妨使用标准的numpy数组...)

Max*_*ian 8

编辑:这个问题仍在投票中,但现在容易得多 -看到这个答案


这里有些相关的问题:在xarray中过滤数据的简便方法

目前最好的办法是组合.where.fillna

valid = date_by_items.notnull()
positive = date_by_items > 0
positive = positive * 2
result = positive.fillna(0.).where(valid)
result
Run Code Online (Sandbox Code Playgroud)

但是xarray即将进行更改,这将使内容更加简洁-如果您有兴趣,请查看GitHub存储库

  • 这些更改是否存在于xarray 0.8.2中? (2认同)