Подтвердить что ты не робот

Перевертывание нулей и единиц в одномерном массиве NumPy

У меня есть одномерный массив NumPy, который состоит из нулей и таких же:

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

Я бы хотел быстро перевернуть значения таким образом, чтобы нули стали единичными, а единицы становятся нулями, что приводит к тому, что массив NumPy выглядит следующим образом:

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

Есть ли для этого простой однострочный? Я посмотрел на функцию fliplr(), но для этого требуются массивы NumPy размером два или более. Я уверен, что есть довольно простой ответ, но любая помощь будет оценена.

4b9b3361

Ответ 1

В вашем Q должно быть что-то, что я не понимаю...

В любом случае

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

Ответ 2

Знак того, что вы, вероятно, должны использовать логический тип данных

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)

Ответ 3

Математически первое, что приходит в голову, - это (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

answer = numpy.ones_like(a) - a

Ответ 5

еще один лишний вариант:

numpy.logical_not(a).astype(int)

Ответ 6

Я также нашел способ сделать это:

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]

Тем не менее, я думаю, что ответ @gboffi - лучший. Я бы поддержал это, но у меня пока нет достаточной репутации: (