2013-05-23 12 views
6

Voglio inversione il valore vero/falso nel mio array numpy mascherato.Maschera inversa Numpy

Quindi nell'esempio seguente non voglio mascherare il secondo valore nell'array di dati, voglio mascherare il primo e il terzo valore.

Di seguito è solo un esempio. Il mio array mascherato è creato da un processo più lungo rispetto a quello eseguito prima. Quindi non posso cambiare lo stesso array di maschere. C'è un altro modo per invertire i valori?

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

numpy.ma.masked_array(data, mask) 

risposta

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

ad esempio

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

Copia il tuo esempio, trovo risultati diversi per logical_not e l'operatore tilde. Dove il primo risulta nella maschera prevista ([[True False True]]), quest'ultimo rende tutti gli elementi della maschera Vero – user508402

+0

uno è logico_not ... l'altro è un binario non ... –