Ответ 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]:
У меня есть одномерный массив 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 размером два или более. Я уверен, что есть довольно простой ответ, но любая помощь будет оценена.
В вашем 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]:
Знак того, что вы, вероятно, должны использовать логический тип данных
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)
Математически первое, что приходит в голову, - это (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
еще один лишний вариант:
numpy.logical_not(a).astype(int)
Я также нашел способ сделать это:
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 - лучший. Я бы поддержал это, но у меня пока нет достаточной репутации: (