Invirtiendo ceros y unos en una matriz NumPy unidimensional

Tengo una matriz NumPy unidimensional que consta de ceros y similares:

array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) 

Me gustaría una forma rápida de simplemente “voltear” los valores, de modo que los ceros se conviertan en unos y se conviertan en ceros, dando como resultado una matriz NumPy como esta:

 array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 

¿Hay una sola línea fácil para esto? Miré la función fliplr() , pero esto parece requerir matrices NumPy de dimensiones dos o mayores. Estoy seguro de que hay una respuesta bastante simple, pero cualquier ayuda sería apreciada.

Debe haber algo en tu Q que no entiendo …

De todas formas

 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 signo de que probablemente debería estar usando un tipo de datos booleano

 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) 

Matemáticamente, lo primero que viene a la mente es (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 

Otra opción superflua:

 numpy.logical_not(a).astype(int) 

También encontré una manera de hacerlo:

 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] 

Aún así, creo que la respuesta de @gboffi es la mejor. Lo habría votado pero aún no tengo suficiente reputación 🙁