将3D numpy数组中等于给定值列表的元素掩码。

3

如何使用整数列表遮盖3D numpy数组?我希望将数组中所有元素中等于列表中任何值的元素都进行遮盖。

2个回答

4
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之间的随机整数值组成的三维数组。然后我们会定义要从第一个数组中掩盖的值。接下来我们使用np.in1d方法基于原始数组和这些值创建布尔类型掩模,并将其传入numpy.ma.MaskedArray,生成一个带有被掩盖值的掩码数组。
这样就可以对非掩盖值进行操作,稍后解除掩盖或用默认值填充。

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数组上操作,因此您还需要在最后进行reshape,以便掩码的形状与数据的形状匹配。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接