2013-08-23 12 views
39

Inizializziamo una matrice NumPy con zeri come qui sotto:Testare se NumPy matrice contiene solo zeri

np.zeros((N,N+1)) 

Ma come si controlla se tutti gli elementi di una matrice n * matrice NumPy proposta n è zero.
Il metodo deve solo restituire un Vero se tutti i valori sono effettivamente pari a zero.

risposta

28

Check out numpy.count_nonzero.

>>> np.count_nonzero(np.eye(4)) 
4 
>>> np.count_nonzero([[0,1,7,0,0],[3,0,0,2,19]]) 
5 
+3

che ci si vuole 'non np.count_nonzero (np.eye (4))' per tornare 'true' solo se tutti i valori sono pari a 0. –

28

userei np.all qui, se si dispone di un array a:

>>> np.all(a==0) 
+0

mi piace che questa risposta verifica la presenza di valori non nulle, nonché . Ad esempio, si può verificare se tutti gli elementi di un array sono uguali facendo 'np.all (a == a [0])'. Molte grazie! –

84

Le altre risposte postato qui funzionerà, ma la funzione più chiara e più efficiente di utilizzare è numpy.any():

>>> all_zeros = not np.any(a) 

o

>>> all_zeros = not a.any() 
  • Questo è preferito su numpy.all(a==0) perché utilizza meno RAM. (Non richiede l'array temporaneo creato dal termine a==0.)
  • Inoltre, è più veloce di numpy.count_nonzero(a) perché può tornare immediatamente quando viene trovato il primo elemento diverso da zero.
+0

Non sono sicuro di essere d'accordo sul fatto che questa sia la soluzione più chiara. – Akavall

-3

Se si sta testando per tutti gli zeri per evitare un avviso su un'altra funzione numpy poi avvolgere la linea in una prova, ad eccezione di blocco sarà evitare di dover fare il test per zeri prima dell'operazione che ti interessa cioè

try: # removes output noise for empty slice 
    mean = np.mean(array) 
except: 
    mean = 0 
Problemi correlati