2013-05-23 8 views
6

Ich möchte den True/False-Wert in meinem numpy maskierten Array invertieren.Numpy inverse Maske

Also im folgenden Beispiel möchte ich nicht den zweiten Wert im Datenarray ausblenden, ich möchte den ersten und dritten Wert ausmaskieren.

Unten ist nur ein Beispiel. Mein maskiertes Array wird durch einen längeren Prozess als zuvor erstellt. Also kann ich das Maskenarray selbst nicht ändern. Gibt es eine andere Möglichkeit, die Werte umzukehren?

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

numpy.ma.masked_array(data, mask) 

Antwort

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

zum Beispiel

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

Ihr Beispiel Kopieren, finde ich unterschiedliche Ergebnisse für logical_not und der Tilde-Operator. Wo ersteres zu der erwarteten Maske führt ([[True False True]]), macht Letzteres alle Maskenelemente True – user508402

+0

Eins ist eine logische_not ... das andere ist eine Binärdatei nicht ... –