Compter les zéros dans le tableau NumPy

Vaibhav Vaibhav 30 janvier 2023
  1. Compter les zéros dans un tableau NumPy en utilisant count_nonzero()
  2. Compter les zéros dans un tableau NumPy en utilisant where()
Compter les zéros dans le tableau NumPy

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éros
  • axis - 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 est None, 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’est False. Si défini sur True, 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.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.