Home Articles

为每个维度屏蔽具有不同掩码的2D数组

Asked
Viewed 126 times
0

我有三个不同的阵列 .

一个是纬度数组(-90到90)另一个是经度数组(0到360),最后一个是2D温度数组,其形状(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)

我得到以下情节:

Bad Masking

但是这个图应该具有高于和低于/ - 60度lat数据屏蔽的数据和数据,除了一些连续的经度条带被屏蔽(基本上是一个矩形的数据) .

我花了最后30-45分钟搜索文档和堆栈溢出类似的问题,没有运气 .

谢谢你的帮助!

-将

1 Answer

  • 1

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

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

    也许使用或代替和? (不确定 . )

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

Related