web-dev-qa-db-ja.com

ゴツゴツした逆マスク

Numpyマスクされた配列のtrue/false値を逆にしたい。

したがって、以下の例では、データ配列の2番目の値をマスクしたくないので、最初と3番目の値をマスクしたいと思います。

以下はほんの一例です。私のマスクされた配列は、以前に実行されたよりも長いプロセスによって作成されます。そのため、マスク配列自体を変更することはできません。値を逆にする別の方法はありますか?

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

numpy.ma.masked_array(data, mask)
12
ustroetz
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)
20
Joran Beasley

最新のPythonバージョンは「logical_not」として「〜」文字もサポートします。たとえば

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

result = data[~mask]
0
Safi