【问题标题】:Mask a 2D array with different masks for each dimension为每个维度使用不同的掩码掩码 2D 数组
【发布时间】:2018-05-06 17:46:07
【问题描述】:

我有三个不同的数组。

一个是纬度数组(-90 到 90),另一个是经度数组(0 到 360),最后一个是二维温度数组,形状为 (len(lats), len(lons) 其中 len(lats) != len(lons)。

我通过其他方式获得了经度掩码,并通过以下方式创建了纬度掩码:

latmask = np.ma.masked_where(np.logical_or(lat < -60, lat > 60), lat).mask

所以现在我有两个 1D 蒙版,我想用“或”逻辑沿适当的轴应用于 2D 数据(也就是如果该索引中的 lat 或 lon 被屏蔽,那么 2D 数据应该被屏蔽) .

我尝试使用以下方法将两个 1D 蒙版组合成一个 2D 蒙版:

2dmask = np.logical_or(latmask , lonmask)
2dmask = latmask * lonmask

但是这些给出了一个错误,说两个数组的形状不同。

2dmask = latmask[np.newaxis, :] & lonmask[:, np.newaxis]

但是当我尝试像这样将这个掩码应用于我的数据并绘制结果时:

testdata = np.ma.masked_array(nt[0,50,:,:], mask = 2dmask)

我得到以下情节:

但是这个图应该有高于和低于 +/- 60 度纬度的数据,并且除了一些连续的经度带之外的数据被屏蔽(基本上是提取一个矩形数据)。

在过去的 30-45 分钟里,我一直在搜索文档和堆栈溢出,以寻找类似的问题,但没有运气。

感谢您的帮助!

-会

【问题讨论】:

    标签: python numpy geo


    【解决方案1】:

    我的猜测是您的解决方案几乎是正确的,只需翻转尺寸:

    twodmask = latmask[:, None] & lonmask[None, :]
    

    也许用 or 代替 and? (不确定。)

    twodmask = latmask[:, None] | lonmask[None, :]
    

    【讨论】:

    • 成功了。我使用了 or 并翻转了尺寸。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 2012-02-14
    • 2017-12-31
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    相关资源
    最近更新 更多