xarray中的布尔索引

时间:2016-09-22 17:58:47

标签: python numpy python-xarray

我有一些带有dims 'time', 'lat', 'lon'的数组,有些只有'lat', 'lon'。为了使用2d(lat-lon)掩码屏蔽时间相关数据,我经常需要这样做:

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

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

z = x + y

但索引并没有像我期望的那样进行广播。我希望能够做到这一点,但它会引发 ValueError:Buffer的维度数量错误

x[mask] = np.nan

最后,xr.where 似乎按预期在时间坐标中广播掩码的值,但您无法通过这种方式设置值。

x_masked = x.where(mask)

那么,我在这里缺少哪些东西有助于使用缺少维度(并且需要广播)的布尔掩码来设置值?我在顶部提供的选项真的是这样做的方式(在这种情况下,我可能只是使用标准的numpy数组......)

1 个答案:

答案 0 :(得分:3)

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

目前,最佳方法是.fillnavalid = date_by_items.notnull() positive = date_by_items > 0 positive = positive * 2 result = positive.fillna(0.).where(valid) result 的组合。

{{1}}

但xarray的变化将会让这更加简洁 - 如果你有兴趣,请查看GitHub回购