HOWTO · NumPy

Supprimer des éléments du tableau dans NumPy

Apprenez à supprimer un ensemble de nombres d'un tableau NumPy en Python

Sur cette page

Choisissez numpy.delete() lorsque vous connaissez les positions à supprimer. Choisissez numpy.setdiff1d() lorsque vous connaissez les valeurs à exclure. Cette distinction compte lorsqu’une valeur apparaît plusieurs fois : supprimer une position peut préserver une autre occurrence, tandis qu’une différence d’ensembles renvoie des valeurs uniques.

Supprimer des éléments par indice avec numpy.delete()

numpy.delete(arr, obj, axis=None) renvoie un nouveau tableau dont les positions sélectionnées ont été supprimées ; la fonction ne modifie pas arr sur place. obj accepte une position entière, une séquence de positions ou une tranche. Les positions commencent à zéro : la position 3 désigne donc le quatrième élément. Si axis est omis ou vaut None, NumPy aplatit le tableau avant de supprimer les positions. Lorsqu’un axe est indiqué, les positions se rapportent à cet axe : l’axe 0 sélectionne les lignes d’un tableau à deux dimensions, et l’axe 1 sélectionne les colonnes.

Cet exemple complet supprime les positions 3, 5 et 7 d’un tableau à une dimension. Exécutez-le tel quel :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import numpy as np

values = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
positions = [3, 5, 7]
remaining = np.delete(values, positions)
print(remaining)
[ 1  2  3  5  7  9 10]

Pour une matrice, axis=1 supprime, dans chaque ligne, les colonnes aux positions indiquées. Avec axis=None, le résultat est plutôt un tableau aplati à une dimension ; les mêmes positions sont alors comptées dans toute la séquence aplatie.

import numpy as np

matrix = np.array([[1, 2, 3, 4, 5], [11, 12, 13, 14, 15], [21, 22, 23, 24, 25]])
without_columns = np.delete(matrix, [1, 2], axis=1)
flattened_without_positions = np.delete(matrix, [1, 2], axis=None)
print(without_columns)
print(flattened_without_positions)

Le résultat avec les colonnes supprimées est de 3 × 3 ; le résultat aplati est unidimensionnel et contient 13 valeurs :

[[ 1  4  5]
 [11 14 15]
 [21 24 25]]
[ 1  4  5 11 12 13 14 15 21 22 23 24 25]

Une position hors limites déclenche IndexError. Par exemple, la position 34 dépasse la longueur d’un tableau de 10 éléments. Interceptez l’erreur pour afficher un diagnostic concis plutôt qu’une trace complète. Le libellé Cannot delete position 34: affiché par l’exemple reste en anglais, car le bloc de code est conservé à l’identique :

import numpy as np

values = np.arange(10)
try:
    np.delete(values, [34])
except IndexError as error:
    print(f"Cannot delete position 34: {error}")
Cannot delete position 34: index 34 is out of bounds for axis 0 with size 10

Consultez la documentation de référence de numpy.delete() pour connaître le détail des paramètres.

Supprimer des valeurs avec numpy.setdiff1d()

Utilisez numpy.setdiff1d(ar1, ar2) pour renvoyer les valeurs uniques présentes dans ar1 et absentes de ar2. Ici, ar2 contient les valeurs à exclure, et non des positions dans ar1. Par défaut, assume_unique=False ; passez ce paramètre à True uniquement si les deux tableaux d’entrée contiennent déjà des valeurs uniques. Il s’agit d’une hypothèse fournie par l’appelant : ne l’activez donc pas pour des tableaux contenant des doublons.

L’exemple suivant montre aussi pourquoi cette fonction ne peut pas remplacer la suppression par position : le tableau d’entrée contient deux fois la valeur 2, mais le résultat de la différence d’ensembles ne contient chaque valeur restante qu’une seule fois.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import numpy as np

values = np.array([4, 2, 4, 1, 2, 3])
excluded_values = np.array([4])
remaining = np.setdiff1d(values, excluded_values)
print(remaining)
[1 2 3]

setdiff1d renvoie des valeurs uniques triées. Le résultat peut donc différer du tableau d’origine à la fois par le traitement des doublons et par l’ordre des éléments. Si l’ordre et chaque occurrence comptent, utilisez plutôt la sélection par position avec numpy.delete(). Consultez la documentation de référence de numpy.setdiff1d() pour connaître son paramètre assume_unique et le comportement de la valeur renvoyée.

Choisir entre une suppression par indice et une suppression par valeur

Utilisez numpy.delete() lorsque la position désigne l’élément à supprimer. La fonction conserve les autres valeurs égales situées à d’autres positions et permet de choisir un axe ou d’aplatir le tableau. Utilisez numpy.setdiff1d() lorsque les valeurs d’un second tableau définissent les éléments à exclure et qu’un résultat unique et trié vous convient. Avant de l’utiliser, tenez compte des doublons et de l’ordre ; avant d’utiliser numpy.delete(), vérifiez que les positions correspondent à l’axe et à la plage voulus. Aucune de ces fonctions ne modifie le tableau d’origine sur place : affectez le tableau renvoyé si vous souhaitez conserver le résultat.