J'ai un tableau NumPy à une dimension qui se compose de zéros et de ceux qui ressemblent à ceci:
array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
J'aimerais un moyen rapide de simplement "retourner" les valeurs telles que les zéros deviennent des zéros, et les uns deviennent des zéros, produisant un tableau NumPy comme ceci:
array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
Y a-t-il un one-liner facile pour cela? J'ai regardé la fonction fliplr()
, mais cela semble nécessiter des tableaux de NumPy de dimensions deux ou plus. Je suis sûr que la réponse est assez simple, mais toute aide serait la bienvenue.
Il doit y avoir quelque chose dans votre Q que je ne comprends pas ...
En tous cas
In [2]: from numpy import array
In [3]: a = array((1,0,0,1,1,0,0))
In [4]: b = 1-a
In [5]: print a ; print b
[1 0 0 1 1 0 0]
[0 1 1 0 0 1 1]
In [6]:
Un signe que vous devriez probablement utiliser un type de données booléen
a = np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=np.bool)
# or
b = ~a
b = np.logical_not(a)
Mathématiquement, la première chose qui me vient à l’esprit est (value + 1) % 2
.
>>> (a+1)%2
array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32)
answer = numpy.ones_like(a) - a
une autre option superflue:
numpy.logical_not(a).astype(int)
J'ai aussi trouvé un moyen de le faire:
In [1]: from numpy import array
In [2]: a = array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
In [3]: b = (~a.astype(bool)).astype(int)
In [4]: print(a); print(b)
[1 1 1 1 1 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 1 1 1 1 1 1 1 1 1]
Néanmoins, je pense que la réponse de @ gboffi est la meilleure. Je l'aurais voté mais je n'ai pas encore assez de réputation :(