【问题标题】:Numpy inverse maskNumpy 逆掩码
【发布时间】:2013-05-19 10:43:40
【问题描述】:

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

所以在下面的示例中,我不想屏蔽数据数组中的第二个值,我想屏蔽第一个和第三个值。

下面只是一个例子。我的屏蔽数组是由比以前运行的更长的进程创建的。所以我不能改变掩码数组本身。还有其他方法可以反转值吗?

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

numpy.ma.masked_array(data, mask)

【问题讨论】:

    标签: python arrays numpy mask


    【解决方案1】:
    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 和波浪号运算符的结果不同。前者导致预期掩码([[ True False True]]),后者使所有掩码元素为真
    【解决方案2】:

    最新的 Python 版本也支持 '~' 字符作为 'logical_not'。例如

    import numpy
    data = numpy.array([[ 1, 2, 5 ]])
    mask = numpy.array([[False,True,False]])
    
    result = data[~mask]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 2018-06-01
      相关资源
      最近更新 更多