【发布时间】:2017-03-02 05:04:51
【问题描述】:
我想在一个大小不同的大数组上合并多个掩码。第二个掩码是在将第一个掩码应用到任意数量的掩码之后制作的。例如,假设我们有以下数组并从中创建一个掩码:
A = np.arange(10)
mask1 = (A <= 5)
现在我们要应用另一个掩码,但仅限于通过 mask1 的数据,如下所示:
mask2 = (A[mask1] % 2 == 0)
要获取未屏蔽的数据,您可以这样做:
D = A[mask1][mask2]
但是,如果您有任意数量的遮罩,每个遮罩都在最后一个遮罩之后应用,那将变得非常麻烦。有没有一种方便的方法来合并掩码,即使它们的大小不同,但是是从同一个数组构造的?
显然,我可以做到,
mask = (A <= 5 & A % 2 == 0)
但这对于我正在处理的数据是不可能的,因为我需要逐步应用掩码。否则它只会太慢。
提前致谢。
【问题讨论】:
-
如果你有一个这样的掩码列表,你可以循环并在每次迭代时获得切片。那么,像
A = A[mask_each_iteration]之类的或者不破坏输入数组,将A复制到输出数组中:out = A.copy()然后在循环中进行这样的切片?因为mask2将依赖于mask1等等,所以您需要一些迭代过程。 -
我想下面的方法会起作用:
total_mask = np.zeros(len(mask1))q = 0for i in range(len(mask1)):if mask1[i] == 1:total_mask[i] = (mask2[q] == 1)q += 1这似乎不是一个非常漂亮的方法,但是,可能只是工作。
标签: python arrays numpy merge mask