繁体   English   中英

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

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

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

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))

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

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

使用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)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM