#1 Le 15/03/2021, à 15:06
- DonutMan75
[RESOLU] Python/Numpy : selection booléenne sur matrice ?
Bonjour à tous,
je débute avec Numpy et n'arrive pas à faire une selection booléenne sur matrice selon deux directions en même temps...
>> x=np.array([1, -1, 1, -1])
>> y=np.array([1, 1, -1, -1])
>> A=np.arange(16).reshape([4,4])
>>A
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Je souhaiterais avoir uniquement :
- les éléments dont le numéro de ligne vérifie x>0 (donc lignes 0 et 2)
- les éléments dont le numéro de colonne vérifie y>0 (donc colonnes 0 et 1)
Donc quelque chose comme :
A[???????]
array([[0, 1], [8, 9]])
J'ai tenté ceci sans succès (et ne comprends pas le résultat) :
>> A[x>0] # Ceci me sélectionne bien les lignes 0 et 2 comme attendu
array([[ 0, 1, 2, 3],
[ 8, 9, 10, 11]])
>> A[:, y>0] # Ceci me sélectionne bien les colonnes 0 et 1 comme attendu
array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]])
>> A[x>0, y>0] # Pourtant ceci ne fonctionne pas...
array([0, 9])
Une âme charitable pourrait m'aider sur ce point ??
Merci d'avance et à bientôt
Donut
Dernière modification par DonutMan75 (Le 15/03/2021, à 15:42)
Hors ligne
#2 Le 15/03/2021, à 15:32
- beuguissime
Re : [RESOLU] Python/Numpy : selection booléenne sur matrice ?
Salut,
In [72]: x = numpy.array([1, -1, 1, -1])
In [73]: y = numpy.array([1, 1, -1, -1])
In [75]: A = numpy.arange(16).reshape([4,4])
In [76]: A[numpy.ix_(x > 0, y > 0)]
Out[76]:
array([[0, 1],
[8, 9]])
ou en moins beau
In [77]: xm = x.repeat(4).reshape(4, 4).transpose()
In [78]: ym = y.repeat(4).reshape(4, 4).transpose()
In [79]: A[(xm.transpose() > 0) & (ym > 0)].reshape(2, 2)
Out[79]:
array([[0, 1],
[8, 9]])
Hors ligne
#3 Le 15/03/2021, à 15:33
- DonutMan75
Re : [RESOLU] Python/Numpy : selection booléenne sur matrice ?
Re-bonjour,
en creusant un peu je suis tombé sur cela qui semble correspondre à mon besoin :
>>> A[x>0][:,y>0]
array([[0, 1],
[8, 9]])
J'ignore ni si c'est propre ni si c'est "pythonic"... qu'en pensez-vous ?
D.
Hors ligne
#4 Le 15/03/2021, à 15:42
- DonutMan75
Re : [RESOLU] Python/Numpy : selection booléenne sur matrice ?
Bonjour beuguissime,
merci pour ta réponse (nos messages se sont croisés !).
Je ne connaissais pas du tout numpy.ix_ et ça correspond parfaitement à ce que je cherche à faire !
Hors ligne