Supprimer (ou filtrer) des éléments d'une matrice avec python et numpy


Supposons que l'on veuille supprimer les éléments négatifs d'une matrice à une dimension A, on peut alors utiliser un simple filtre A[A > 0], exemple:

>>> A = np.array(([-1,2,4,7,-3,9,3]))
>>> A[A > 0]
array([2, 4, 7, 9, 3])

Attention, pour une matrice à deux dimensions ou plus, le filtre A[A > 0] retourne une matrice à une dimension, illustration:

>>> A = np.array(([1,2,-3],[4,-5,6],[-7,8,-9]))
>>> A
array([[ 1,  2, -3],
          [ 4, -5,  6],
          [-7,  8, -9]])
>>> A[A > 0]
array([1, 2, 4, 6, 8])

On peut aussi utiliser numpy.where pour obtenir les indices des éléments positifs (>0) de la matrice A:

>>> A = np.array(([1,2,-3],[4,-5,6],[-7,8,-9]))
>>> A
array([[ 1,  2, -3],
          [ 4, -5,  6],
          [-7,  8, -9]])
>>> np.where( A > 0)
(array([0, 0, 1, 1, 2]), array([0, 1, 0, 2, 1]))

ou encore créer un "mask":

>>> import numpy.ma as ma
>>> B = ma.masked_array(A, mask = ( A > 0) )
>>> B
masked_array(data =
 [[-- -- -3]
 [-- -5 --]
 [-7 -- -9]],
         mask =
 [[ True  True False]
 [ True False  True]
 [False  True False]],
   fill_value = 999999)
>>>

Références