我有一些带有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数组......)
答案 0 :(得分:3)
这里有一些相关的问题:Concise way to filter data in xarray
目前,最佳方法是.fillna
和valid = date_by_items.notnull()
positive = date_by_items > 0
positive = positive * 2
result = positive.fillna(0.).where(valid)
result
的组合。
{{1}}
但xarray的变化将会让这更加简洁 - 如果你有兴趣,请查看GitHub回购