
Cet article décrit comment compter le nombre d’éléments satisfaisant les conditions du tableau NumPy ndarray.
- Pour tout le ndarray
- Pour chaque ligne et colonne de ndarray
- Vérifiez si au moins un élément satisfait la condition :
numpy.any()
- Vérifiez si tous les éléments satisfont aux conditions :
numpy.all()
- Conditions multiples
- Compter les valeurs manquantes NaN et infinity inf
Si vous souhaitez extraire ou supprimer des éléments, des lignes et des colonnes qui remplissent les conditions, consultez l’article suivant.
Si vous souhaitez remplacer un élément qui remplit les conditions, consultez l’article suivant.
Voir l’article suivant pour le nombre total d’éléments.
Compter le nombre d’éléments satisfaisant la condition pour l’ensemble du ndarray
L’opération de comparaison de ndarray renvoie ndarray avec 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]]
L’utilisation de np.count_nonzero() donne le nombre de True, c’est-à-dire le nombre d’éléments qui satisfont la condition.
print(np.count_nonzero(a < 4))
# 4
print(np.count_nonzero(a % 2 == 1))
# 6
Puisque True est traité comme 1 et False comme 0, vous pouvez utiliser np.sum(). Cependant, np.count_nonzero() est plus rapide que np.sum().
print(np.sum(a < 4))
# 4
print(np.sum(a % 2 == 1))
# 6
Comptez le nombre d’éléments satisfaisant la condition pour chaque ligne et colonne de ndarray
np.count_nonzero() pour le nombre de tableaux multidimensionnels pour chaque axe (chaque dimension) en spécifiant le paramètre axe.
Dans le cas d’un tableau à deux dimensions, axe = 0 donne le nombre par colonne, axe = 1 donne le nombre par ligne.
En utilisant cela, vous pouvez compter le nombre d’éléments remplissant les conditions pour chaque ligne et colonne.
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]
Notez que le paramètre axis de np.count_nonzero() est nouveau dans la version 1.12.0. Dans les anciennes versions, vous pouvez utiliser np.sum(). Dans np.sum(), vous pouvez spécifier l’axe de la version 1.7.0
Vérifiez si au moins un élément satisfait la condition :numpy.any()
np.any() est une fonction qui renvoie True lorsque ndarray passé au premier paramètre contient au moins un élément True et renvoie False sinon.
print(np.any(a < 4))
# True
print(np.any(a > 100))
# False
Comme avec np.count_nonzero(), np.any() est traité pour chaque ligne ou colonne lorsque le paramètre axis est spécifié.
print(np.any(a < 4, axis=0))
# [ True True True True]
print(np.any(a < 4, axis=1))
# [ True False False]
Vérifiez si tous les éléments satisfont aux conditions :numpy.all()
np.all() est une fonction qui renvoie True lorsque tous les éléments de ndarray passés au premier paramètre sont True, et renvoie False sinon.
print(np.all(a < 4))
# False
print(np.all(a < 100))
# True
Comme avec np.count_nonzero(), np.all() est traité pour chaque ligne ou colonne lorsque le paramètre axis est spécifié.
print(np.all(a < 4, axis=0))
# [False False False False]
print(np.all(a < 4, axis=1))
# [ True False False]
Conditions multiples
Si vous souhaitez combiner plusieurs conditions, entourez chaque expression conditionnelle de () et utilisez & ou |.
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]
Consultez l’article suivant pour savoir pourquoi vous devez utiliser &, | au lieu de et, ou et pourquoi les parenthèses sont nécessaires.
Compter les valeurs manquantes NaN et infinity inf
Pour compter le nombre de valeurs manquantes NaN, vous devez utiliser la fonction spéciale.
Utilisez le fichier CSV avec des données manquantes comme exemple pour les valeurs manquantes 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.]]
La valeur manquante NaN peut être générée par np.nan, float(‘nan’), etc. Cependant, même si les valeurs manquantes sont comparées à ==, elle devient False. Vous devez utiliser np.isnan() pour compter.
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]]
Après cela, tout comme les exemples précédents, vous pouvez compter le nombre de True avec np.count_nonzero() ou 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]
Si vous souhaitez compter les éléments qui ne manquent pas de valeurs, utilisez la négation ~.
print(~np.isnan(a_nan))
# [[ True True False True]
# [ True False False True]
# [ True True True True]]
Vous pouvez également utiliser np.isnan() pour remplacer ou supprimer les valeurs manquantes.
La fonction qui détermine si un élément est infini inf (comme np.inf) est np.isinf(). L’infini positif et négatif sont vrais.
a_inf = np.array([-np.inf, 0, np.inf])
print(a_inf)
# [-inf 0. inf]
print(np.isinf(a_inf))
# [ True False True]
inf peut être comparé à ==. Si vous voulez juger uniquement positif ou négatif, vous pouvez utiliser ==.
print(a_inf == np.inf)
# [False False True]
print(a_inf == -np.inf)
# [ True False False]
Après cela, tout comme les exemples précédents, vous pouvez compter le nombre de True avec np.count_nonzero() ou np.sum().
Pour plus d’informations sur infinity inf, consultez l’article suivant.