Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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