对每个维度使用不同掩码的二维数组进行掩码
Mask a 2D array with different masks for each dimension
我有三个不同的数组。
一个是纬度数组(-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 掩码,我想使用 "or" 逻辑沿适当的轴将其应用于 2D 数据(也就是如果该索引中的纬度或经度被掩码,则 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 分钟在文档和堆栈溢出中搜索类似问题,但没有成功。
感谢您的帮助!
-威尔
我的猜测是你的解决方案几乎是正确的,只需翻转维度:
twodmask = latmask[:, None] & lonmask[None, :]
也许用 or 代替 and? (不确定。)
twodmask = latmask[:, None] | lonmask[None, :]
我有三个不同的数组。
一个是纬度数组(-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 掩码,我想使用 "or" 逻辑沿适当的轴将其应用于 2D 数据(也就是如果该索引中的纬度或经度被掩码,则 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 分钟在文档和堆栈溢出中搜索类似问题,但没有成功。
感谢您的帮助!
-威尔
我的猜测是你的解决方案几乎是正确的,只需翻转维度:
twodmask = latmask[:, None] & lonmask[None, :]
也许用 or 代替 and? (不确定。)
twodmask = latmask[:, None] | lonmask[None, :]