11

我有一些带有暗淡的数组,'time', 'lat', 'lon'有些只有'lat', 'lon'. 我经常必须这样做才能使用 2d(经纬度)掩码来掩码与时间相关的数据:

x.data[:, mask.data] = np.nan

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

z = x + y

但是索引并没有像我期望的那样广播。我希望能够做到这一点,但它会引发ValueError: Buffer has wrong number of dimensions

x[mask] = np.nan

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

x_masked = x.where(mask)

那么,我在这里是否缺少一些有助于使用缺少尺寸(并且需要广播)的布尔掩码设置值的东西?我在顶部提供的选项真的是做到这一点的方法吗(在这种情况下,我不妨只使用标准的 numpy 数组......)

4

1 回答 1

9

编辑:这个问题仍然得到了赞成,但现在容易了 - 看到这个答案


这里有点相关的问题:Concise way to filter data in xarray

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

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

但是 xarray 正在发生变化,这将使这更加简洁 - 如果您有兴趣,请查看 GitHub 存储库

于 2016-09-23T16:20:54.100 回答