首页 文章

xarray中的布尔索引

提问于
浏览
3

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

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

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

z = x + y

但索引并没有预期 . 我希望能够做到这一点,但它引发了ValueError:缓冲区的维数错误:

x[mask] = np.nan

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

x_masked = x.where(mask)

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

1 回答

  • 3

    这里有一些相关的问题: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回购

相关问题