Numpy逆掩码

23

我想反转我的numpy掩码数组中的真/假值。

因此,在下面的示例中,我不想屏蔽数据数组中的第二个值,而是要屏蔽第一个和第三个值。

以下仅为示例。 我的掩码数组是在之前运行的较长过程中创建的。 因此,我无法更改掩码数组本身。 是否有另一种方法可以反转这些值?

import numpy
data = numpy.array([[ 1, 2, 5 ]])
mask = numpy.array([[0,1,0]])

numpy.ma.masked_array(data, mask)
2个回答

44
import numpy
data = numpy.array([[ 1, 2, 5 ]])
mask = numpy.array([[0,1,0]])

numpy.ma.masked_array(data, ~mask) #note this probably wont work right for non-boolean (T/F) values
#or
numpy.ma.masked_array(data, numpy.logical_not(mask))

例如
>>> a = numpy.array([False,True,False])
>>> ~a
array([ True, False,  True], dtype=bool)
>>> numpy.logical_not(a)
array([ True, False,  True], dtype=bool)
>>> a = numpy.array([0,1,0])
>>> ~a
array([-1, -2, -1])
>>> numpy.logical_not(a)
array([ True, False,  True], dtype=bool)

复制您的示例后,我发现logical_not和tilde运算符产生不同的结果。前者产生了预期的掩码([[ True False True]]),而后者使所有掩码元素都为True。 - user508402

7
最新的Python版本也支持将“~”字符作为“logical_not”使用。例如:
import numpy
data = numpy.array([[ 1, 2, 5 ]])
mask = numpy.array([[False,True,False]])

result = data[~mask]

最好明确地说明是哪个Python版本。我不知道2018年11月18日最新的Python版本是哪个。 - msoutopico

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