Supprimer une ligne d'un matrice avec numpy sous python


Avec Numpy il existe plusieurs façons de supprimer une ou plusieurs lignes d'une matrice. Le plus simple est d'utiliser la fonction delete, illustration:

>>> import numpy as np
>>> Mi = np.array([[1, 2, 3], [4, 100, 6], [100,1,2], [12, 100, 50]])
>>> print Mi
[[  1   2   3]
 [  4 100   6]
 [100   1   2]
 [ 12 100  50]]
>>> print Mi.shape
(4, 3)
>>> M = np.delete(Mi, (2), axis=0)
 >>> print M
 [[  1   2   3]
  [  4 100   6]
  [ 12 100  50]]
 >>> print M.shape
 (3, 3)

dans cet exemple la fonction "delete(Mi, (2), axis=0)" a supprimée la troisième ligne de la matrice initiale Mi (Rappel: il s'agit bien de la troisième ligne (2)+1 car sous python par défaut les indices commence à 0).

Cependant il arrive que l'on souhaite supprimer des lignes sous certaines conditions. Imaginons par exemple que l'on veuille supprimer toutes les lignes de la matrice Mi ou les éléments sont plus grand que 30 dans la deuxième colonne. Dans ce cas la syntaxe est la suivante:

  >>> import numpy as np
  >>> Mi = np.array([[1, 2, 3], [4, 100, 6], [100,1,2], [12, 100, 50]])
  >>> print Mi
 [[  1   2   3]
  [  4 100   6]
  [100   1   2]
  [ 12 100  50]]
  >>> print Mi.shape
 (4, 3)
  >>> M = Mi[~(Mi[:,1] > 30)]
  >>> print M
 [[  1   2   3]
  [100   1   2]]
  >>> print M.shape
 (2, 3)
  >>>

Dans l'exemple ci-dessus deux lignes on été supprimées: les lignes 2 et 4 de la matrice Mi car 100 > 30 dans la deuxième colonne des lignes 2 et 4.

Recherches associées