掩码3D numpy数组,其中数组等于值列表

时间:2015-02-26 14:30:40

标签: python numpy masking

如何使用整数列表屏蔽3D numpy数组?我希望数组中元素等于列表中任何值的所有元素都被屏蔽。

2 个答案:

答案 0 :(得分:3)

import numpy as np
import numpy.ma as ma

randomArray = np.random.random_integers(0, 10, (5, 5, 5))
maskingValues = [1, 2, 5]  
maskedRandomArray = ma.MaskedArray(randomArray, np.in1d(randomArray, maskingValues))

为了便于说明,上面将创建一个具有0到10之间随机整数值的3D数组。然后,我们将定义要从第一个数组中屏蔽的值。然后我们使用np.in1d方法根据我们的原始数组和值创建一个bool掩码,并将其传递给numpy.ma.MaskedArray,这会生成一个屏蔽数组,其值被屏蔽掉。

然后,这允许您对非掩码值运行操作,然后取消屏蔽,然后再使用默认值填充它们。

答案 1 :(得分:1)

np.in1d用于此

import numpy as np

data = np.arange(8).reshape(2,2,2)
nums_wanted = [2,3]

mask = np.in1d( data, nums_wanted ).reshape( data.shape )

print "mask =", mask
print "found elements =", data[mask]

这将输出:

mask = [[[False False]
  [ True  True]]

 [[False False]
  [False False]]]
found elements = [2 3]

np.in1d基本上与vanilla python中的in关键字相当。因为它只在1d阵列上运行,所以你还需要在最后进行重塑,以便掩码的形状与数据的形状相匹配。

如果您想要这些职位的索引,可以使用np.where

indices = zip( *np.where(mask) )
print indices
# [(0, 1, 0), (0, 1, 1)]