web-dev-qa-db-fra.com

Inverser les zéros et les uns dans un tableau NumPy à une dimension

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.

17
kylerthecreator

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]: 
51
gboffi

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)
9
YXD

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)
4
CoryKramer
answer = numpy.ones_like(a) - a
1
heltonbiker

une autre option superflue:

numpy.logical_not(a).astype(int)
1
John Greenall

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 :(

0
Mikolaj Buchwald