Bonsoir à tous,

Pour connaitre les cases d'un tableau 'a' qui vérifient simultanément deux conditions, on peut utiliser l'opérateur * qui fait le produit point par point de deux matrices. Par exemple, étant donné le a suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
a=np.array([[1,10,2],[2,-6,8]]),a
>>array([[ 1, 10,  7],
       [ 2, -6,  8]])
une manière d'obtenir la matrice booléenne qui nous informe des cases de a qui sont paires et inférieurs à 6 est de faire (a%2==0)*(a<=6)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
(a<=6)*(a%2==0)
>>array([[False, False, False],
       [ True,  True, False]], dtype=bool)
Dans le même esprit, j'ai essayé de faire le ou logique en écrivant (a%2==0)+(a<=6)-(a%2==0)*(a<=6), mais le résultat retourné n'est pas celui attendu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
(a%2==0)+(a<=6)-(a%2==0)*(a<=6)
>>array([[ True,  True, False],
       [False, False,  True]], dtype=bool)
Là où les deux conditions sont réunies (cases 1,0 et 1,1), j'obtiens un false au lieu d'un true. Pourtant, si on traduit les True et False par 1 et 0 respectivement, ma formule (a%2==0)+(a<=6)-(a%2==0)*(a<=6) est bien l'opérateur logique 'ou'.

P.S : je sais qu'il existe np.logical_or, mais je ne comprends pas le comportement à l'exécution de ma formule.

Bien cordialement.