floflo29
floflo29

Reputation: 2321

Invert 0 and 1 in a binary array

Is there a function in Numpy to invert 0 and 1 in a binary array? If

a = np.array([0, 1, 0, 1, 1])

I would like to get:

b = [1, 0, 1, 0, 0]

I use:

b[a==0] = 1
b[a==1] = 0

but maybe it already exist something in Numpy to do this.

Upvotes: 20

Views: 35461

Answers (4)

Lucas Meier
Lucas Meier

Reputation: 449

Another funny approach:

b = 2**a % 2

It works since 2**0 = 1.

Upvotes: 1

WasimKhan
WasimKhan

Reputation: 41

In Python 3, suppose

a = [1]
a.append(a[0]^1)
print(a)

Output will be:

[1,0]

Thus if you apply a loop:

for i in range(len(a)):
    a.append(a[i]^1)

all the elements of the list will be inverted.

Upvotes: 4

shivsn
shivsn

Reputation: 7828

you can simply do:

In[1]:b=1-a
In[2]:b
Out[2]: array([1, 0, 1, 0, 0])

or

In[22]:b=(~a.astype(bool)).astype(int)
Out[22]: array([1, 0, 1, 0, 0])

Upvotes: 45

Kasravnd
Kasravnd

Reputation: 107287

A functional approach:

>>> np.logical_not(a).astype(int)
array([1, 0, 1, 0, 0])

Upvotes: 15

Related Questions