web-dev-qa-db-de.com

Spiegeln von Nullen und Einsen im eindimensionalen NumPy-Array

Ich habe ein eindimensionales NumPy-Array, das aus Nullen und Einsen besteht:

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

Ich möchte einen schnellen Weg finden, um die Werte einfach so zu "spiegeln", dass aus Nullen Einsen und aus Einsen Nullen werden, was zu einem NumPy-Array wie dem folgenden führt:

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

Gibt es dafür einen einfachen Einzeiler? Ich habe mir die Funktion fliplr() angesehen, aber dafür sind offenbar NumPy-Arrays mit einer Größe von mindestens zwei erforderlich. Ich bin sicher, es gibt eine ziemlich einfache Antwort, aber jede Hilfe wäre dankbar.

17
kylerthecreator

Es muss etwas in deinem Q geben, das ich nicht verstehe ...

Sowieso

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

Ein Zeichen, dass Sie wahrscheinlich einen booleschen Datentyp verwenden sollten

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

Mathematisch ist das erste, was mir einfällt, (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

eine weitere überflüssige Option:

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

Ich habe auch einen Weg gefunden, dies zu tun:

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]

Trotzdem denke ich, dass @ gboffis Antwort die beste ist. Ich hätte es hochgestuft, aber ich habe noch nicht genug Ruf :(

0