Dans NumPy, la fonction 𝐧𝐩.𝐝𝐞𝐥𝐞𝐭𝐞() vous permet de supprimer des lignes, des colonnes et d’autres éléments spécifiques d’un tableau ( 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 ).
Les utilisateurs doivent préciser l’axe cible (dimension) et les positions (telles que les numéros de ligne ou de colonne) à supprimer. De plus, il est possible de supprimer plusieurs lignes ou colonnes simultanément à l’aide d’une liste ou d’une tranche.
Consultez les articles suivants pour savoir comment supprimer des éléments, des lignes et des colonnes en fonction de conditions plutôt qu’en spécifiant leurs positions par index, ou pour supprimer des lignes et des colonnes contenant N𝐚N .
- NumPy : extraire ou supprimer des éléments, des lignes et des colonnes qui satisfont aux conditions
- NumPy : Supprimer NaN (np.nan) d’un tableau
Pour modifier la forme, comme réduire ou augmenter les dimensions, utilisez 𝐫𝐞𝐬𝐡𝐚𝐩𝐞() .
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
Utilisation de base de 𝐧𝐩.𝐝𝐞𝐥𝐞𝐭𝐞()
La fonction 𝐧𝐩.𝐝𝐞𝐥𝐞𝐭𝐞() nécessite trois arguments.
- 𝐧𝐩.𝐝𝐞𝐥𝐞𝐭𝐞(𝐚𝐫𝐫, 𝐨𝐛𝐣, 𝐚𝐱𝐢𝐬=N𝐨𝐧𝐞)
- 𝐚𝐫𝐫 : Le tableau d’entrée
- 𝐨𝐛𝐣 : les numéros de ligne ou de colonne à supprimer, spécifiés sous forme d’entier, de liste ou de tranche
- 𝐚𝐱𝐢𝐬 : L’axe à supprimer, la valeur par défaut est N𝐨𝐧𝐞
Considérez le tableau 2D suivant comme exemple.
a = np.arange(12).reshape(3, 4) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]
Par exemple, pour supprimer la deuxième ligne, définissez 𝐨𝐛𝐣=1 (indexation basée sur zéro) et 𝐚𝐱𝐢𝐬=0 . Le 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 d’origine n’est pas modifié et une nouvelle copie de 𝐧𝐝𝐚𝐫𝐫𝐚𝐲 est renvoyée.
a_del = np.delete(a, 1, 0) print(a_del) # [[ 0 1 2 3] # [ 8 9 10 11]] print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]
Spécification de l’index à supprimer : 𝐨𝐛𝐣
Le deuxième argument 𝐨𝐛𝐣 spécifique l’index (tel que les numéros de ligne ou de colonne) à supprimer. La spécification d’un index inexistant entraînera une erreur.
L’axe cible est spécifié par le troisième argument 𝐚𝐱𝐢𝐬 . Dans cet exemple, 𝐚𝐱𝐢𝐬=0 cible les lignes.
a = np.arange(12).reshape(3, 4) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.delete(a, 0, 0)) # [[ 4 5 6 7] # [ 8 9 10 11]] print(np.delete(a, 2, 0)) # [[0 1 2 3] # [4 5 6 7]] # print(np.delete(a, 3, 0)) # IndexError: index 3 is out of bounds for axis 0 with size 3
Spécifier l’axe à supprimer : 𝐚𝐱𝐢𝐬
Le troisième argument 𝐚𝐱𝐢𝐬 spécifique l’axe à partir duquel supprimer les éléments. La spécification d’une dimension inexistante entraînera une erreur.
Dans un tableau 2D, les lignes correspondant à la 0ème dimension et les colonnes à la 1ère dimension.
a = np.arange(12).reshape(3, 4) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.delete(a, 1, 0)) # [[ 0 1 2 3] # [ 8 9 10 11]] print(np.delete(a, 1, 1)) # [[ 0 2 3] # [ 4 6 7] # [ 8 10 11]] # print(np.delete(a, 1, 2)) # AxisError: axis 2 is out of bounds for array of dimension 2
Si 𝐚𝐱𝐢𝐬=N𝐨𝐧𝐞 , le tableau est aplati avant de supprimer les éléments spécifiés par 𝐨𝐛𝐣 . Étant donné que la valeur par défaut de 𝐚𝐱𝐢𝐬 est N𝐨𝐧𝐞 , l’omission de cet argument déclenchera automatiquement ce comportement.
print(np.delete(a, 1, None)) # [ 0 2 3 4 5 6 7 8 9 10 11] print(np.delete(a, 1)) # [ 0 2 3 4 5 6 7 8 9 10 11]
Supprimer plusieurs lignes/colonnes à la fois
Plusieurs lignes et colonnes peuvent être supprimées à la fois en spécifiant une liste ou une tranche dans le deuxième argument 𝐨𝐛𝐣 .
Préciser avec une liste
Spécifiez les numéros de ligne ou de colonne avec une liste.
a = np.arange(12).reshape(3, 4) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.delete(a, [0, 2], 0)) # [[4 5 6 7]] print(np.delete(a, [0, 3], 1)) # [[ 1 2] # [ 5 6] # [ 9 10]]
À partir de la version 1.19 de NumPy, une liste ou un tableau de valeurs booléennes peut être traité comme un masque, l’index correspondant à T𝐫𝐮𝐞 étant supprimé. Une erreur se produit si le nombre d’éléments spécifiés ne correspond pas à la taille de la dimension.
print(np.delete(a, [True, False, True], 0)) # [[4 5 6 7]] print(np.delete(a, [True, False, False, True], 1)) # [[ 1 2] # [ 5 6] # [ 9 10]] # print(np.delete(a, [True, False, True], 1)) # ValueError: boolean array argument obj to delete must be one dimensional and match the axis length of 4
Spécifié avec une tranche
Il est également possible d’utiliser une tranche pour ralentir plusieurs lignes ou colonnes. Pour plus de détails sur les tranches et 𝐬𝐥𝐢𝐜𝐞() , reportez-vous à l’article suivant.
𝐬𝐨𝐮𝐬 𝐥𝐞𝐮𝐫()
Générez un objet slice avec 𝐬𝐥𝐢𝐜𝐞() et spécifiquez-le comme deuxième argument 𝐨𝐛𝐣 .
Il est équivalent à [:𝐬𝐭𝐨𝐩] s’il n’y a qu’un seul argument, [𝐬𝐭𝐚𝐫𝐭:𝐬𝐭𝐨𝐩] s’il y en a deux, et [𝐬𝐭𝐚𝐫𝐭:𝐬𝐭𝐨𝐩:𝐬𝐭𝐞𝐩] s’il y en a trois. Utilisez N𝐨𝐧𝐞 explicité pour omettre.
a = np.arange(12).reshape(3, 4) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.delete(a, slice(2), 1)) # [[ 2 3] # [ 6 7] # [10 11]] print(np.delete(a, slice(1, 3), 1)) # [[ 0 3] # [ 4 7] # [ 8 11]] print(np.delete(a, slice(None, None, 2), 1)) # [[ 1 3] # [ 5 7] # [ 9 11]]
𝐧𝐩.𝐬_[]
𝐧𝐮𝐦𝐩𝐲.𝐬_[] permet d’écrire des tranches sous la forme .
print(np.delete(a, np.s_[:2], 1)) # [[ 2 3] # [ 6 7] # [10 11]] print(np.delete(a, np.s_[1:3], 1)) # [[ 0 3] # [ 4 7] # [ 8 11]] print(np.delete(a, np.s_[::2], 1)) # [[ 1 3] # [ 5 7] # [ 9 11]]
Supprimer les lignes et les colonnes à la fois
Il est impossible de supprimer plusieurs dimensions (comme des lignes et des colonnes) à la fois avec 𝐧𝐩.𝐝𝐞𝐥𝐞𝐭𝐞() . Pour supprimer différentes dimensions, appliquez 𝐝𝐞𝐥𝐞𝐭𝐞() à plusieurs reprises.
a = np.arange(12).reshape(3, 4) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(np.delete(np.delete(a, 1, 0), 1, 1)) # [[ 0 2 3] # [ 8 10 11]]
Exemples avec trois dimensions ou plus
Jusqu’à présent, pour plus de commodité, nous avons discuté des lignes et des colonnes de tableaux à deux dimensions, mais les mêmes concepts s’appliquent aux tableaux à trois dimensions ou plus.
Considérez le tableau suivant comme exemple.
a_3d = np.arange(24).reshape(2, 3, 4) print(a_3d) # [[[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] # # [[12 13 14 15] # [16 17 18 19] # [20 21 22 23]]] print(a_3d.shape) # (2, 3, 4)
Spécifiez la dimension avec l’argument 𝐚𝐱𝐢𝐬 et les index avec l’argument 𝐨𝐛𝐣 .
print(np.delete(a_3d, 1, 0)) # [[[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]] print(np.delete(a_3d, 1, 1)) # [[[ 0 1 2 3] # [ 8 9 10 11]] # # [[12 13 14 15] # [20 21 22 23]]] print(np.delete(a_3d, 1, 2)) # [[[ 0 2 3] # [ 4 6 7] # [ 8 10 11]] # # [[12 14 15] # [16 18 19] # [20 22 23]]]
La même chose a choisi de s’appliquer à la spécification de plusieurs index avec une liste ou une tranche.
print(np.delete(a_3d, [0, 3], 2)) # [[[ 1 2] # [ 5 6] # [ 9 10]] # # [[13 14] # [17 18] # [21 22]]] print(np.delete(a_3d, np.s_[::2], 2)) # [[[ 1 3] # [ 5 7] # [ 9 11]] # # [[13 15] # [17 19] # [21 23]]]
