Exemples de comment sélectionner ou masquer les valeurs d'une matrice d'après les valeurs d'une autre matrice sous python:
Masquer une matrice à partir d'une autre matrice
Pour masquer une matrice à partir d'une autre matrice, il existe plusieurs possibilités avec numpy (voir le module intitulé ma). On peut par exemple utiliser numpy.ma.masked_where pour masquer les éléments de la matrice x quand les éléments de la matrice y sont égaux à 0, illustration:
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([0,1,1,0])
>>> m = np.ma.masked_where(y==0, x)
>>> m
masked_array(data = [-- 2 3 --],
mask = [ True False False True],
fill_value = 999999)
On peut alors utiliser le "masked_array" pour obtenir une nouvelle matrice depuis la matrice x sans les éléments masqués:
>>> masked_x = np.ma.compressed(m)
>>> masked_x
array([2, 3])
Autre approche en utilisant numpy.ma.getmask:
>>> m_mask = np.ma.getmask(m)
>>> masked_array = np.ma.masked_array(x, mask=m_mask)
>>> masked_x = np.ma.compressed(masked_array)
>>> masked_x
array([2, 3])
Inverser le masque
Pour inverser un masque on peut utiliser par exemple la fonction numpy invert, exemple:
>>> m_mask
array([ True, False, False, True])
>>> m_mask = np.invert(m_mask)
>>> m_mask
array([False, True, True, False])
>>> masked_array = np.ma.masked_array(x, mask=m_mask)
>>> np.ma.compressed(masked_array)
array([1, 4])
Exemple avec plusieurs conditions
On peut aussi avoir plusieurs conditions sur la matrice y exemple:
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array(([1,2,3,4],[1,1,1,1]))
>>> m = np.ma.masked_where(((y[0,:]==1)&(y[1,:]==1)), x)
>>> np.ma.compressed(m)
array([2, 3, 4])
Inverser le masque en utilisant numpy.ma.masked_not_equal:
>>> x = np.array([1,2,3,4])
>>> y = np.array(([1,2,3,4],[1,1,1,1]))
>>> m = np.ma.masked_not_equal(((y[0,:]==1)&(y[1,:]==1)), x)
>>> mask1 = np.ma.getmask(m)
>>> m = np.ma.masked_array(x, mask=mask1)
>>> np.ma.compressed(m)
array([1])
Références
Liens | Site |
---|---|
how to apply a mask from one array to another array? | stackoverflow |
The numpy.ma module | docs.scipy.org |
numpy.ma.masked_where | docs.scipy.org |
numpy.ma.masked_equal | docs.scipy.org |
numpy.ma.masked_not_equal | docs.scipy.org |
numpy.ma.masked_object | docs.scipy.org |
numpy.ma.getmask | docs.scipy.org |
numpy.invert | docs.scipy.org |