Skip to content

Cet article explique comment compter les valeurs dans un tableau NumPy ( ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ ) qui rรฉpondent ร  certaines conditions.

La taille du tableau (nombre total d’รฉlรฉments) peut รชtre obtenue avec l’attribut ๐ฌโ€Œ๐ขโ€Œ๐ณโ€Œ๐žโ€Œ .

Pour extraire, supprimer ou remplacer des รฉlรฉments, des lignes ou des colonnes qui rรฉpondent ร  certaines conditions, reportez-vous aux articles suivants.

La version de NumPy utilisรฉe dans cet article est la suivante. Notez que les fonctionnalitรฉs peuvent varier selon les versions.

import numpy as np print(np.__version__) # 1.26.1 

Compter les valeurs dans un tableau avec une condition : ๐งโ€Œ๐ฉโ€Œ.๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ_๐งโ€Œ๐จโ€Œ๐งโ€Œ๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ()

๐งโ€Œ๐ฉโ€Œ.๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ_๐งโ€Œ๐จโ€Œ๐งโ€Œ๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ() compte le nombre de valeurs non nulles dans un tableau.

a = np.arange(12).reshape((3, 4)) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.count_nonzero(a)) # 11 

L’utilisation d’opรฉrateurs de comparaison tels que < , == , != pour comparer ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ avec une valeur scalaire entraรฎne une comparaison รฉlรฉment par รฉlรฉment, produisant un boolรฉen ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ .

print(a < 4) # [[ True True True True] # [False False False False] # [False False False False]] print(a % 2 == 0) # [[ True False True False] # [ True False True False] # [ True False True False]] 

ร‰tant donnรฉ que T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ est traitรฉ comme 1 et F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ comme 0 , ๐งโ€Œ๐ฉโ€Œ.๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ_๐งโ€Œ๐จโ€Œ๐งโ€Œ๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ() peut compter directement le nombre de valeurs T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ , reprรฉsentant les valeurs qui remplissent la condition.

print(np.count_nonzero(a < 4)) # 4 print(np.count_nonzero(a % 2 == 0)) # 6 

๐งโ€Œ๐ฉโ€Œ.๐ฌโ€Œ๐ฎโ€Œ๐ฆโ€Œ() peut รฉgalement renvoyer le mรชme rรฉsultat, mais ๐งโ€Œ๐ฉโ€Œ.๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ_๐งโ€Œ๐จโ€Œ๐งโ€Œ๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ() est plus rapide.

print(np.sum(a < 4)) # 4 print(np.sum(a % 2 == 0)) # 6 

Compter les valeurs par ligne ou par colonne

Pour les tableaux multidimensionnels, ๐งโ€Œ๐ฉโ€Œ.๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ_๐งโ€Œ๐จโ€Œ๐งโ€Œ๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ() peut traiter chaque axe en spรฉcifiant l’argument ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ . La valeur par dรฉfaut, ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ=N๐จโ€Œ๐งโ€Œ๐žโ€Œ , compte les valeurs non nulles sur l’ensemble du tableau.

Pour un tableau ร  deux dimensions, le paramรจtre ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ=0 compte les valeurs non nulles par colonne et ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ=1 les comptes par ligne.

a = np.arange(12).reshape((3, 4)) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.count_nonzero(a < 4)) # 4 print(np.count_nonzero(a < 4, axis=0)) # [1 1 1 1] print(np.count_nonzero(a < 4, axis=1)) # [4 0 0] 

En dรฉfinissant l’argument ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ๐โ€Œ๐ขโ€Œ๐ฆโ€Œ๐ฌโ€Œ sur T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ , le rรฉsultat aura le mรชme nombre de dimensions que le tableau d’origine.

print(np.count_nonzero(a < 4, keepdims=True)) # [[4]] print(np.count_nonzero(a < 4, axis=0, keepdims=True)) # [[1 1 1 1]] print(np.count_nonzero(a < 4, axis=1, keepdims=True)) # [[4] # [0] # [0]] 

Notez que l’argument ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ a รฉtรฉ introduit dans ๐งโ€Œ๐ฉโ€Œ.๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ_๐งโ€Œ๐จโ€Œ๐งโ€Œ๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ() dans NumPy version 1.12, et ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ๐โ€Œ๐ขโ€Œ๐ฆโ€Œ๐ฌโ€Œ dans la version 1.19. En revanche, les deux arguments sont disponibles dans ๐งโ€Œ๐ฉโ€Œ.๐ฌโ€Œ๐ฎโ€Œ๐ฆโ€Œ() depuis la version 1.7. Par consรฉquent, pour les versions antรฉrieures ร  la version 1.12, pensez ร  utiliser ๐งโ€Œ๐ฉโ€Œ.๐ฌโ€Œ๐ฎโ€Œ๐ฆโ€Œ() .

Vรฉrifiez si au moins une valeur rรฉpond ร  la condition : ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐งโ€Œ๐ฒโ€Œ()

๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐งโ€Œ๐ฒโ€Œ() renvoie T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ si au moins un รฉlรฉment du tableau spรฉcifiรฉ est T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ ; sinon, elle renvoie F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ .

Cette fonction est utile pour dรฉterminer si un รฉlรฉment rรฉpond ร  une condition spรฉcifiรฉe.

a = np.arange(12).reshape((3, 4)) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.any(a < 4)) # True print(np.any(a > 100)) # False 

Similaire ร  ๐งโ€Œ๐ฉโ€Œ.๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ_๐งโ€Œ๐จโ€Œ๐งโ€Œ๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ() , ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐งโ€Œ๐ฒโ€Œ() ร  l’argument ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ .

print(np.any(a < 4, axis=0)) # [ True True True True] print(np.any(a < 4, axis=1)) # [ True False False] 

Bien qu’aucun exemple ne soit fourni ici, notez que ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐งโ€Œ๐ฒโ€Œ() prend รฉgalement en charge l’argument ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ๐โ€Œ๐ขโ€Œ๐ฆโ€Œ๐ฌโ€Œ .

Vรฉrifiez si toutes les valeurs correspondent ร  la condition : ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐ฅโ€Œ๐ฅโ€Œ()

๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐ฅโ€Œ๐ฅโ€Œ() renvoie T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ si tous les รฉlรฉments du tableau spรฉcifiรฉs sont T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ ; sinon, elle renvoie F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ .

Cette fonction est utile pour dรฉterminer si tous les รฉlรฉments rรฉpondent ร  une condition spรฉcifiรฉe.

a = np.arange(12).reshape((3, 4)) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.all(a < 4)) # False print(np.all(a < 100)) # True 

Similaire ร  ๐งโ€Œ๐ฉโ€Œ.๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ_๐งโ€Œ๐จโ€Œ๐งโ€Œ๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ() , ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐ฅโ€Œ๐ฅโ€Œ() ร  l’argument ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ .

print(np.all(a < 4, axis=0)) # [False False False False] print(np.all(a < 4, axis=1)) # [ True False False] 

Bien qu’aucun exemple ne soit fourni ici, notez que ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐ฅโ€Œ๐ฅโ€Œ() prend รฉgalement en charge l’argument ๐คโ€Œ๐žโ€Œ๐žโ€Œ๐ฉโ€Œ๐โ€Œ๐ขโ€Œ๐ฆโ€Œ๐ฌโ€Œ .

Conditions multiples

Pour combiner plusieurs conditions, placez chaque expression conditionnelle entre parenthรจses () et reliez-les par & (AND) ou | (OU). La nรฉgation ~ (NOT) est รฉgalement utilisable.

a = np.arange(12).reshape((3, 4)) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print((a < 4) | (a % 2 == 0)) # [[ True True True True] # [ True False True False] # [ True False True False]] print(np.count_nonzero((a < 4) | (a % 2 == 0))) # 8 print(np.count_nonzero((a < 4) | (a % 2 == 0), axis=0)) # [3 1 3 1] print(np.count_nonzero((a < 4) | (a % 2 == 0), axis=1)) # [4 2 2] 

Notez que l’utilisation de ๐šโ€Œ๐งโ€Œ๐โ€Œ ou ๐จโ€Œ๐ซโ€Œ , ou l’omission de parenthรจses, gรฉnรจre une erreur.

Comptez les valeurs N๐šโ€ŒN et non- N๐šโ€ŒN

Par exemple, N๐šโ€ŒN peut se produire lors de la lecture d’un fichier CSV avec des donnรฉes manquantes.

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.]] 

ร‰tant donnรฉ que la comparaison de N๐šโ€ŒN avec N๐šโ€ŒN renvoie toujours F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ , vous devez utiliser ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() pour compter les valeurs N๐šโ€ŒN .

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]] 

Ensuite, comme dans les exemples prรฉcรฉdents, comptez le nombre de T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ avec ๐งโ€Œ๐ฉโ€Œ.๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ_๐งโ€Œ๐จโ€Œ๐งโ€Œ๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ() ou ๐งโ€Œ๐ฉโ€Œ.๐ฌโ€Œ๐ฎโ€Œ๐ฆโ€Œ() .

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] 

Pour compter les valeurs non N๐šโ€ŒN , utilisez la nรฉgation ~ .

print(~np.isnan(a_nan)) # [[ True True False True] # [ True False False True] # [ True True True True]] 

Pour remplacer ou supprimer des valeurs manquantes, reportez-vous aux articles suivants.

Compter l’infini ( ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ )

Pour vรฉrifier si une valeur est infinie ( ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ ), utilisez la fonction ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ() , qui renvoie T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ pour l’infini positif et nรฉgatif.

a_inf = np.array([-np.inf, 0, np.inf]) print(a_inf) # [-inf 0. inf] print(np.isinf(a_inf)) # [ True False True] 

๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐ฉโ€Œ๐จโ€Œ๐ฌโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ() , qui renvoie T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ pour l’infini positif, et ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐žโ€Œ๐ โ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ() , qui renvoie T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ pour l’infini nรฉgatif, sont รฉgalement fournis.

print(np.isposinf(a_inf)) # [False False True] print(np.isneginf(a_inf)) # [ True False False] 

Puisque l’infini peut รชtre comparรฉ ร  == , vous pouvez รฉgalement utiliser == pour vรฉrifier s’il s’agit d’un infini positif ou nรฉgatif.

print(a_inf == np.inf) # [False False True] print(a_inf == -np.inf) # [ True False False] 

Une fois le tableau boolรฉen obtenu, comptez simplement T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ comme dans les exemples prรฉcรฉdents.

print(np.count_nonzero(np.isinf(a_inf))) # 2 print(np.count_nonzero(np.isposinf(a_inf))) # 1 print(np.count_nonzero(np.isneginf(a_inf))) # 1 

Pour les opรฉrations avec l’infini ( ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ ) en Python, reportez-vous ร  l’article suivant.