100 votes

Inverser un tableau booléen numpy en utilisant ~

Puis-je utiliser ~A pour inverser un tableau numpy de booléens, au lieu des fonctions plutôt maladroites np.logical_and() et np.invert() ?

En effet, ~ semble fonctionner correctement, mais je ne le trouve dans aucun manuel de référence nympy, et - plus inquiétant - il ne fonctionne certainement pas avec des scalaires (par exemple, bool(~True) renvoie True !), donc je suis un peu inquiet ...

76voto

squid Points 325

Réponse courte : OUI

Réf :

http://docs.scipy.org/doc/numpy/reference/generated/numpy.invert.html

Remarque :

Calcule le NON bit à bit de la représentation binaire sous-jacente des entiers dans les tableaux d'entrée. Cette fonction ufunc implémente l'opérateur C/Python ~.

et

bitwise_not est un alias pour invert :

np.bitwise_not is np.invert True

6voto

Joooeey Points 562

Vous pouvez utiliser le tilde si le dtype du tableau est booléen et que vous êtes sûr que cela ne changera pas lorsque le logiciel évoluera. Cependant, np.logical_not présente deux avantages :

  • Cela fonctionne également pour les tableaux d'objets, qui peuvent facilement apparaître si des np.nan ou d'autres objets se retrouvent dans votre tableau.
  • Son sens est clair pour toute personne ayant quelques notions de logique.

Il y a aussi np.invert mais il ne fonctionne pas avec les tableaux d'objets et le mot est ambigu.

~np.array([False, True], dtype=bool)
Out[7]: array([ True, False])

~np.array([False, True], dtype=object)
Out[9]: array([-1, -2], dtype=object)

np.invert([True, False])
Out[4]: array([False,  True])

np.invert((np.array([True, False], dtype=object)))
Out[5]: array([-2, -1], dtype=object)

np.logical_not(np.array([False, True], dtype=bool))
Out[8]: array([ True, False])

np.logical_not(np.array([False, True], dtype=object))
Out[10]: array([True, False], dtype=object)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X