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)>>> mmasked_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_xarray([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_xarray([2, 3])
Inverser le masque
Pour inverser un masque on peut utiliser par exemple la fonction numpy invert, exemple:
>>> m_maskarray([ True, False, False, True])>>> m_mask = np.invert(m_mask)>>> m_maskarray([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 |
