为了账号安全,请及时绑定邮箱和手机立即绑定

如何将一个数组中的蒙版应用于另一个数组?

如何将一个数组中的蒙版应用于另一个数组?

泛舟湖上清波郎朗 2021-03-15 17:19:37
我已经阅读了几次遮罩的数组文档,在各处搜索并且感到非常愚蠢。我一生都无法弄清楚如何将一个面罩从一个阵列应用到另一个阵列。例子:import numpy as npy = np.array([2,1,5,2])          # y axisx = np.array([1,2,3,4])          # x axism = np.ma.masked_where(y>2, y)   # filter out values larger than 5print m[2 1 -- 2]print np.ma.compressed(m)[2 1 2]所以这很好用...。但是要绘制此y轴,我需要一个匹配的x轴。如何将掩码从y数组应用于x数组?这样的事情是有道理的,但是会产生垃圾:new_x = x[m.mask].copy()new_xarray([5])因此,到底是如何完成的(请注意,新的x数组必须是新的数组)。编辑:好吧,看来这样做的一种方法是这样的:>>> import numpy as np>>> x = np.array([1,2,3,4])>>> y = np.array([2,1,5,2])>>> m = np.ma.masked_where(y>2, y)>>> new_x = np.ma.masked_array(x, m.mask)>>> print np.ma.compressed(new_x)[1 2 4]但这真是令人头疼!我正在尝试找到像IDL一样优雅的解决方案...
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

这可能不是OP想要知道的100%,但这只是我一直使用的一小段代码-如果您想以相同的方式屏蔽多个数组,则可以使用此通用函数来屏蔽动态数numpy一次数组:


def apply_mask_to_all(mask, *arrays):

assert all([arr.shape == mask.shape for arr in arrays]), "All Arrays need to have the same shape as the mask"

return tuple([arr[mask] for arr in arrays])

请参阅此示例用法:


    # init 4 equally shaped arrays

x1 = np.random.rand(3,4)

x2 = np.random.rand(3,4)

x3 = np.random.rand(3,4)

x4 = np.random.rand(3,4)


# create a mask

mask = x1 > 0.8


# apply the mask to all arrays at once

x1, x2, x3, x4 = apply_mask_to_all(m, x1, x2, x3, x4)


查看完整回答
反对 回复 2021-03-23
  • 3 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信