
In questo articolo viene descritto come contare il numero di elementi che soddisfano le condizioni della matrice NumPy ndarray.
- Per l’intero ndarray
- Per ogni riga e colonna di ndarray
- Verifica se almeno un elemento soddisfa la condizione:
numpy.any()
- Verifica se tutti gli elementi soddisfano le condizioni:
numpy.all()
- Condizioni multiple
- Conta i valori mancanti NaN e infinito inf
Se desideri estrarre o eliminare elementi, righe e colonne che soddisfano le condizioni, consulta il seguente articolo.
Se si desidera sostituire un elemento che soddisfa le condizioni, vedere il seguente articolo.
Vedere il seguente articolo per il numero totale di elementi.
Conta il numero di elementi che soddisfano la condizione per l’intero ndarray
L’operazione di ndarray di confronto riporta ndarray con bool (True, False).
import numpy as np
a = np.arange(12).reshape((3, 4))
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print(a < 4)
# [[ True True True True]
# [False False False False]
# [False False False False]]
print(a % 2 == 1)
# [[False True False True]
# [False True False True]
# [False True False True]]
Usando np.count_nonzero() si ottiene il numero di True, cioè il numero di elementi che soddisfano la condizione.
print(np.count_nonzero(a < 4))
# 4
print(np.count_nonzero(a % 2 == 1))
# 6
Poiché True viene considerato come 1 e False come 0, puoi utilizzare np.sum(). Tuttavia, np.count_nonzero() è più veloce di np.sum().
print(np.sum(a < 4))
# 4
print(np.sum(a % 2 == 1))
# 6
Conta il numero di elementi che soddisfano la condizione per ogni riga e colonna di ndarray
np.count_nonzero() per i conti di array multidimensionali per ogni asse (ogni dimensione) specificando l’asse del parametro.
Nel caso di una matrice bidimensionale, asse=0 fornisce il conteggio per colonna, asse=1 fornisce il conteggio per riga.
Usando questo, puoi contare il numero di elementi che soddisfano le condizioni per ogni riga e colonna.
print(np.count_nonzero(a < 4, axis=0))
# [1 1 1 1]
print(np.count_nonzero(a < 4, axis=1))
# [4 0 0]
print(np.count_nonzero(a % 2 == 1, axis=0))
# [0 3 0 3]
print(np.count_nonzero(a % 2 == 1, axis=1))
# [2 2 2]
Si noti che il parametro axis di np.count_nonzero() è nuovo in 1.12.0. Nelle versioni precedenti puoi usare np.sum(). In np.sum(), puoi specificare l’asse dalla versione 1.7.0
Verifica se almeno un elemento soddisfa la condizione:numpy.any()
np.
print(np.any(a < 4))
# True
print(np.any(a > 100))
# False
Come con np.count_nonzero(), np.any() viene elaborato per ogni riga o colonna quando viene l’asse del parametro.
print(np.any(a < 4, axis=0))
# [ True True True True]
print(np.any(a < 4, axis=1))
# [ True False False]
Verifica se tutti gli elementi soddisfano le condizioni:numpy.all()
np.() è una funzione che finisce True quando tutti gli elementi di ndarray passati al primo parametro sono True, altrimenti richiede False.
print(np.all(a < 4))
# False
print(np.all(a < 100))
# True
Come con np.count_nonzero(), np.all() viene elaborato per ogni riga o colonna quando viene l’asse del parametro.
print(np.all(a < 4, axis=0))
# [False False False False]
print(np.all(a < 4, axis=1))
# [ True False False]
Condizioni multiple
Se si desidera combinare più condizioni, racchiudere ciascuna espressione condizionale con () e utilizzare & o |.
print((a < 4) | (a % 2 == 1))
# [[ True True True True]
# [False True False True]
# [False True False True]]
print(np.count_nonzero((a < 4) | (a % 2 == 1)))
# 8
print(np.count_nonzero((a < 4) | (a % 2 == 1), axis=0))
# [1 3 1 3]
print(np.count_nonzero((a < 4) | (a % 2 == 1), axis=1))
# [4 2 2]
Vedere il seguente articolo per sapere perché è necessario utilizzare &, | invece di e, oe perché sono necessarie le parentesi.
Conta i valori mancanti NaN e infinito inf
Per contare il numero di valori mancanti NaN, è necessario utilizzare la funzione speciale.
Utilizzare il file CSV con dati mancanti come esempio per i valori mancanti NaN.
a_nan = np.genfromtxt('data/src/sample_nan.csv', delimiter=',')
print(a_nan)
# [[11. 12. nan 14.]
# [21. nan nan 24.]
# [31. 32. 33. 34.]]
Il valore mancante NaN può essere generato da np.nan, float(‘nan’), ecc. Tuttavia, anche se i valori mancanti vengono confrontati con ==, diventa falso. Devi usare np.isnan() per contare.
print(np.nan == np.nan)
# False
print(a_nan == np.nan)
# [[False False False False]
# [False False False False]
# [False False False False]]
print(np.isnan(a_nan))
# [[False False True False]
# [False True True False]
# [False False False False]]
Dopodiché, proprio come gli esempi precedenti, puoi contare il numero di True con np.count_nonzero() o np.sum().
print(np.count_nonzero(np.isnan(a_nan)))
# 3
print(np.count_nonzero(np.isnan(a_nan), axis=0))
# [0 1 2 0]
print(np.count_nonzero(np.isnan(a_nan), axis=1))
# [1 2 0]
Se vuoi contare gli elementi a cui non mancano i valori, usa la negazione ~.
print(~np.isnan(a_nan))
# [[ True True False True]
# [ True False False True]
# [ True True True True]]
Puoi anche usare np.isnan() per sostituire o eliminare i valori mancanti.
La funzione che determina se un elemento è infinito inf (come np.inf) è np.isinf(). Sia l’infinito positivo che quello negativo sono Veri.
a_inf = np.array([-np.inf, 0, np.inf])
print(a_inf)
# [-inf 0. inf]
print(np.isinf(a_inf))
# [ True False True]
inf può essere confrontato con ==. Se vuoi giudicare solo positivo o negativo, puoi usare ==.
print(a_inf == np.inf)
# [False False True]
print(a_inf == -np.inf)
# [ True False False]
Dopodiché, proprio come gli esempi precedenti, puoi contare il numero di True con np.count_nonzero() o np.sum().
Per ulteriori informazioni su infinity inf, vedere l’articolo seguente.