屏蔽 3D numpy 数组,其中数组等于值列表

Mask 3D numpy array where array is equal to a list of values

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

为此使用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 基本上等同于原版 python 中的 in 关键字。由于它仅在一维数组上运行,因此您还需要在最后进行整形,以便掩码的形状与数据的形状相匹配。

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

indices = zip( *np.where(mask) )
print indices
# [(0, 1, 0), (0, 1, 1)]
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,它生成一个掩码数组,其中的值被掩码。

这样您就可以 运行 对非屏蔽值进行操作,然后再取消屏蔽或用默认值填充它们。