Compter les zéros dans le tableau NumPy
-
Compter les zéros dans un tableau NumPy en utilisant
count_nonzero()
-
Compter les zéros dans un tableau NumPy en utilisant
where()
Parfois, nous devons compter les éléments à l’intérieur d’un tableau. Lors du comptage, nous associons parfois une condition et comptons les éléments satisfaisant cette condition. Il peut s’agir d’une condition supérieure à, d’une condition inférieure à, d’une condition égale, etc.
Dans cet article, nous allons apprendre à compter efficacement les zéros dans un tableau NumPy.
NumPy est livré avec toutes sortes de méthodes que nous pouvons appliquer aux tableaux et matrices NumPy multidimensionnels. Il a également quelques fonctions que nous pouvons utiliser pour compter les zéros.
Cet article traitera de deux de ces méthodes, count_nonzero()
et where()
.
Compter les zéros dans un tableau NumPy en utilisant count_nonzero()
Comme son nom l’indique, cette méthode compte les éléments non nuls. Nous utiliserons cette fonction pour compter les zéros.
count_nonzero()
renvoie une valeur entière ou un tableau de valeurs entières.
La syntaxe de count_nonzero()
est ci-dessous.
count_nonzero(a, axis, keepdims)
Il a les paramètres suivants.
a
- Le tableau dans lequel la fonction comptera les zérosaxis
- C’est un paramètre optionnel, et il fait référence à l’axe ou au tuple d’axes le long duquel les éléments non nuls seront comptés. La valeur par défaut de ce paramètre estNone
, ce qui signifie que le comptage se fera sur un tableau aplati.keepdims
- C’est un paramètre booléen optionnel. Par défaut, c’estFalse
. Si défini surTrue
, les axes comptés sont laissés dans le résultat sous forme de dimensions de taille 1.
Maintenant, comptons les zéros en utilisant cette méthode. Reportez-vous à l’extrait de code suivant pour la première manière.
import numpy as np
myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(f"Number of Non-Zeroes in Array --> {np.count_nonzero(myArray)}")
print(f"Number of Non-Zeroes in Matrix --> {np.count_nonzero(myMatrix)}")
print(f"Number of Zeroes in Array --> {myArray.size - np.count_nonzero(myArray)}")
print(f"Number of Zeroes in Matrix --> {myMatrix.size - np.count_nonzero(myMatrix)}")
Production:
[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
[0 1 0 1]
[1 0 1 0]
[1 1 0 0]]
Number of Non-Zeroes in Array --> 6
Number of Non-Zeroes in Matrix --> 8
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8
Dans l’extrait de code ci-dessus, tout ce que nous avons fait est de compter le nombre d’éléments non nuls, puis de soustraire le nombre d’éléments non nuls de la taille totale du tableau ou de la matrice.
Cette solution n’est peut-être pas la meilleure utilisation de cette fonction, mais ce qui suit est.
import numpy as np
myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray == 0)
print(myMatrix == 0)
print(f"Number of Zeroes in Array --> {np.count_nonzero(myArray == 0)}")
print(f"Number of Zeroes in Matrix --> {np.count_nonzero(myMatrix == 0)}")
Production:
[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
[0 1 0 1]
[1 0 1 0]
[1 1 0 0]]
[False False True False False True False False True]
[[ True True False False]
[ True False True False]
[False True False True]
[False False True True]]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8
Le cœur de cette solution est le principe que tout ce qui est False
en informatique peut être représenté par 0
et True
peut être représenté par une valeur non nulle.
L’instruction myArray == 0
renvoie un tableau dans lequel tous les éléments qui satisfont la propriété sont True
et ceux qui ne le sont pas sont False
. Et la condition elle-même vérifie si un élément est nul ou non. Ainsi, tous les éléments nuls se transformeront en True
et maintenant, nous devons les compter. Et pour cela, nous utilisons la méthode count_nonzero()
.
Ici est le lien vers la documentation officielle de la fonction.
Compter les zéros dans un tableau NumPy en utilisant where()
La fonction where()
filtre les éléments d’un tableau en fonction d’une condition spécifiée et renvoie le tableau filtré. Il renvoie les index des éléments filtrés. En utilisant cette fonction, nous allons construire un tableau qui n’a que des zéros, et la longueur de ce nouveau tableau me donnera le nombre de zéros.
Voyons maintenant la solution.
import numpy as np
myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray[np.where(myArray == 0)])
print(myMatrix[np.where(myMatrix == 0)])
print(f"Number of Zeroes in Array --> {myArray[np.where(myArray == 0)].size}")
print(f"Number of Zeroes in Matrix --> {myMatrix[np.where(myMatrix == 0)].size}")
Production:
[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
[0 1 0 1]
[1 0 1 0]
[1 1 0 0]]
[0 0 0]
[0 0 0 0 0 0 0 0]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8
Dans l’extrait de code ci-dessus, nous avons filtré tous les éléments qui étaient nuls. La fonction where()
a renvoyé les index de ces éléments. Nous avons également utilisé ces index pour obtenir les éléments d’origine. De toute évidence, ils seront tous nuls. Enfin, nous avons compté le nombre de ces zéros et imprimé les décomptes.