Cet article décrit comment extraire ou supprimer des éléments, des lignes et des colonnes qui satisfont à la condition du tableau NumPy 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 .
- Extraire les éléments qui satisfont aux conditions
- Extraire les lignes et les colonnes qui satisfont aux conditions
- Tous les éléments satisfont à la condition : 𝐧𝐮𝐦𝐩𝐲.𝐚𝐥𝐥()
- Au moins un élément satisfait la condition : 𝐧𝐮𝐦𝐩𝐲.𝐚𝐧𝐲()
- Supprimer les éléments, les lignes et les colonnes qui remplissent les conditions
- Utiliser ~ (NE PAS)
- Utilisez 𝐧𝐮𝐦𝐩𝐲.𝐝𝐞𝐥𝐞𝐭𝐞() et 𝐧𝐮𝐦𝐩𝐲.𝐰𝐡𝐞𝐫𝐞()
- Conditions multiples
Consultez l’article suivant pour un exemple lorsque 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 contient des valeurs manquantes N𝐚N .
Si vous souhaitez remplacer ou compter un élément qui satisfait les conditions, consultez l’article suivant.
- numpy.where() : manipuler des éléments en fonction de conditions
- NumPy : Compter les valeurs dans un tableau avec des conditions
Pour extraire des lignes et des colonnes par tranches ou listes plutôt que par conditions, consultez l’article suivant.
Extraire les éléments qui satisfont aux conditions
Si vous souhaitez extraire des éléments qui répondent à la condition, vous pouvez utiliser . . . . .
Même si le tableau d’origine est un tableau multidimensionnel, un tableau unidimensionnel aplati est renvoyé.
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 < 5) # [[ True True True True] # [ True False False False] # [False False False False]] print(a[a < 5]) # [0 1 2 3 4] print(a < 10) # [[ True True True True] # [ True True True True] # [ True True False False]] print(a[a < 10]) # [0 1 2 3 4 5 6 7 8 9]
Un nouveau 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 est renvoyé et le 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 d’origine reste identique. Il en va de même pour les exemples suivants.
b = a[a < 10] print(b) # [0 1 2 3 4 5 6 7 8 9] print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]
Il est possible de calculer la somme, la moyenne, la valeur maximale, la valeur minimale, l’écart type, etc., des éléments qui satisfont la condition.
print(a[a < 5].sum()) # 10 print(a[a < 5].mean()) # 2.0 print(a[a < 5].max()) # 4 print(a[a < 10].min()) # 0 print(a[a < 10].std()) # 2.8722813232690143
Extraire les lignes et les colonnes qui satisfont aux conditions
Dans l’exemple d’extraction d’éléments, un tableau unidimensionnel est renvoyé, mais si vous utilisez 𝐧𝐩.𝐚𝐥𝐥() et 𝐧𝐩.𝐚𝐧𝐲() , vous pouvez extraire des lignes et des colonnes tout en conservant la dimension 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 d’origine .
Tous les éléments satisfont à la condition : 𝐧𝐮𝐦𝐩𝐲.𝐚𝐥𝐥()
𝐧𝐩.𝐚𝐥𝐥() est une fonction qui renvoie T𝐫𝐮𝐞 lorsque tous les éléments de 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 passés au premier paramètre sont T𝐫𝐮𝐞 et renvoie F𝐚𝐥𝐬𝐞 dans le cas contraire.
Si vous spécifiez le paramètre 𝐚𝐱𝐢𝐬 , il renvoie T𝐫𝐮𝐞 si tous les éléments sont T𝐫𝐮𝐞 pour chaque axe. Dans le cas d’un tableau à deux dimensions, le résultat est pour les colonnes lorsque 𝐚𝐱𝐢𝐬=0 et pour les lignes lorsque 𝐚𝐱𝐢𝐬=1 .
print(a < 5) # [[ True True True True] # [ True False False False] # [False False False False]] print(np.all(a < 5)) # False print(np.all(a < 5, axis=0)) # [False False False False] print(np.all(a < 5, axis=1)) # [ True False False] print(a < 10) # [[ True True True True] # [ True True True True] # [ True True False False]] print(np.all(a < 10, axis=0)) # [ True True False False] print(np.all(a < 10, axis=1)) # [ True True False]
Les lignes et les colonnes sont extraites en donnant chaque résultat à [𝐫𝐨𝐰𝐬, :] ou [:, 𝐜𝐨𝐥𝐮𝐦𝐧𝐬] . Pour [𝐫𝐨𝐰𝐬, :] , le , : de fin peut être omis.
print(a[:, np.all(a < 10, axis=0)]) # [[0 1] # [4 5] # [8 9]] print(a[np.all(a < 10, axis=1), :]) # [[0 1 2 3] # [4 5 6 7]] print(a[np.all(a < 10, axis=1)]) # [[0 1 2 3] # [4 5 6 7]]
Si la condition n’est pas remplie, un 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 vide est renvoyé.
print(a[:, np.all(a < 5, axis=0)]) # []
Même si une seule ligne ou une seule colonne est extraite, le nombre de dimensions ne change pas.
print(a[np.all(a < 5, axis=1)]) # [[0 1 2 3]] print(a[np.all(a < 5, axis=1)].ndim) # 2 print(a[np.all(a < 5, axis=1)].shape) # (1, 4)
Au moins un élément satisfait la condition : 𝐧𝐮𝐦𝐩𝐲.𝐚𝐧𝐲()
𝐧𝐩.𝐚𝐧𝐲() est une fonction qui renvoie T𝐫𝐮𝐞 lorsque 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 passé au premier paramètre contient au moins un élément T𝐫𝐮𝐞 , et renvoie F𝐚𝐥𝐬𝐞 sinon.
Si vous spécifiez le paramètre 𝐚𝐱𝐢𝐬 , il renvoie T𝐫𝐮𝐞 si au moins un élément est T𝐫𝐮𝐞 pour chaque axe. Dans le cas d’un tableau à deux dimensions, le résultat est pour les colonnes lorsque 𝐚𝐱𝐢𝐬=0 et pour les lignes lorsque 𝐚𝐱𝐢𝐬=1 .
print(a < 5) # [[ True True True True] # [ True False False False] # [False False False False]] print(np.any(a < 5)) # True print(np.any(a < 5, axis=0)) # [ True True True True] print(np.any(a < 5, axis=1)) # [ True True False]
Vous pouvez extraire des lignes et des colonnes qui correspondent aux conditions de la même manière que 𝐧𝐩.𝐚𝐥𝐥() .
print(a[:, np.any(a < 5, axis=0)]) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(a[np.any(a < 5, axis=1)]) # [[0 1 2 3] # [4 5 6 7]]
Supprimer les éléments, les lignes et les colonnes qui remplissent les conditions
Si vous souhaitez supprimer des éléments, des lignes ou des colonnes au lieu de les extraire en fonction de conditions, il existe les deux méthodes suivantes.
Utiliser ~ (NE PAS)
Si vous ajoutez l’opérateur de négation ~ à une condition, les éléments, les lignes et les colonnes qui ne satisfont pas à la condition sont extraits. Cela équivaut à supprimer les éléments, les lignes ou les colonnes qui satisfont à la condition.
print(a[~(a < 5)]) # [ 5 6 7 8 9 10 11] print(a[:, np.all(a < 10, axis=0)]) # [[0 1] # [4 5] # [8 9]] print(a[:, ~np.all(a < 10, axis=0)]) # [[ 2 3] # [ 6 7] # [10 11]] print(a[np.any(a < 5, axis=1)]) # [[0 1 2 3] # [4 5 6 7]] print(a[~np.any(a < 5, axis=1)]) # [[ 8 9 10 11]]
Utilisez 𝐧𝐮𝐦𝐩𝐲.𝐝𝐞𝐥𝐞𝐭𝐞() et 𝐧𝐮𝐦𝐩𝐲.𝐰𝐡𝐞𝐫𝐞()
Les lignes et les colonnes peuvent également être supprimées à l’aide de 𝐧𝐩.𝐝𝐞𝐥𝐞𝐭𝐞() et 𝐧𝐩.𝐰𝐡𝐞𝐫𝐞() .
Dans 𝐧𝐩.𝐝𝐞𝐥𝐞𝐭𝐞() , défini la cible 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 , l’index à supprimer et l’axe cible.
Dans le cas d’un tableau à deux dimensions, les lignes sont supprimées si 𝐚𝐱𝐢𝐬=0 et les colonnes sont supprimées si 𝐚𝐱𝐢𝐬=1 .
print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.delete(a, [0, 2], axis=0)) # [[4 5 6 7]] print(np.delete(a, [0, 2], axis=1)) # [[ 1 3] # [ 5 7] # [ 9 11]]
Voir également l’article suivant pour 𝐧𝐩.𝐝𝐞𝐥𝐞𝐭𝐞() .
𝐧𝐩.𝐰𝐡𝐞𝐫𝐞() renvoie l’index de l’élément qui satisfait la condition.
Dans le cas d’un tableau multidimensionnel, un tuple d’une liste d’indices (numéro de ligne, numéro de colonne) qui satisfait à la condition pour chaque dimension (ligne, colonne) est renvoyée.
print(a < 2) # [[ True True False False] # [False False False False] # [False False False False]] print(np.where(a < 2)) # (array([0, 0]), array([0, 1])) print(np.where(a < 2)[0]) # [0 0] print(np.where(a < 2)[1]) # [0 1]
Voir également l’article suivant pour 𝐧𝐩.𝐰𝐡𝐞𝐫𝐞() .
En combinant ces deux fonctions, vous pouvez supprimer les lignes et les colonnes qui satisfont à la condition.
print(np.delete(a, np.where(a < 2)[0], axis=0)) # [[ 4 5 6 7] # [ 8 9 10 11]] print(np.delete(a, np.where(a < 2)[1], axis=1)) # [[ 2 3] # [ 6 7] # [10 11]] print(a == 6) # [[False False False False] # [False False True False] # [False False False False]] print(np.where(a == 6)) # (array([1]), array([2])) print(np.delete(a, np.where(a == 6))) # [ 0 3 4 5 6 7 8 9 10 11] print(np.delete(a, np.where(a == 6)[0], axis=0)) # [[ 0 1 2 3] # [ 8 9 10 11]] print(np.delete(a, np.where(a == 6)[1], axis=1)) # [[ 0 1 3] # [ 4 5 7] # [ 8 9 11]]
Comme dans l’exemple ci-dessus, les lignes et les colonnes qui contiennent au moins un élément satisfaisant à la condition sont supprimées. Cela revient à utiliser 𝐧𝐩.𝐚𝐧𝐲() .
Conditions multiples
Si vous souhaitez combiner plusieurs conditions, entourez chaque condition de () et utilisez & ou | .
print(a[(a < 10) & (a % 2 == 1)]) # [1 3 5 7 9] print(a[np.any((a == 2) | (a == 10), axis=1)]) # [[ 0 1 2 3] # [ 8 9 10 11]] print(a[:, ~np.any((a == 2) | (a == 10), axis=0)]) # [[ 0 1 3] # [ 4 5 7] # [ 8 9 11]]