Bitweise Operationen in NumPy

Bitweise Operationen sind eine Klasse von Operationen, die auf der Bit-Ebene von Binärzahlen ausgeführt werden. Sie arbeiten direkt auf den einzelnen Bits von Binärzahlen, ohne den Gesamtwert der Zahl zu berücksichtigen.

NumPy bietet eine Reihe von bitweisen Operationsfunktionen, die bitweise Operationen auf Elemente in Arrays ermöglichen. Diese Operationen ähneln den bitweisen Operatoren von Python, wirken jedoch auf NumPy-Arrays, unterstützen vektorisierte Verarbeitung und bieten eine höhere Leistung.

Bitweise Operationen werden in der Informatik häufig zur Optimierung und Verarbeitung von Low-Level-Daten verwendet.

NumPy bitwise_Die Funktionen, die mit "bitwise" beginnen, sind bitweise Operationsfunktionen.

Bitweise Operationen in NumPy umfassen die folgenden Funktionen:

AktionFunktion/OperatorBeschreibung
Bitweises ANDnumpy.bitwise_and(x1, x2)Führt eine bitweise UND-Operation für jedes Element des Arrays aus.
Bitweises ORnumpy.bitwise_or(x1, x2)Führt eine bitweise ODER-Operation für jedes Element des Arrays aus.
Bitweises XORnumpy.bitwise_xor(x1, x2)Führt eine bitweise XOR-Operation für jedes Element des Arrays aus.
Bitweises NICHTnumpy.invert(x)Führt eine bitweise NICHT-Operation für jedes Element des Arrays aus.
Linksverschiebungnumpy.left_shift(x1, x2)Verschiebt jedes Element des Arrays um die angegebene Anzahl von Bits nach links.
Rechtsverschiebungnumpy.right_shift(x1, x2)Verschiebt jedes Element des Arrays um die angegebene Anzahl von Bits nach rechts.

Beispiel

import numpy as np

arr1 = np.array([True, False, True], dtype=bool)
arr2 = np.array([False, True, False], dtype=bool)

result_and = np.bitwise_and(arr1, arr2)
result_or = np.bitwise_or(arr1, arr2)
result_xor = np.bitwise_xor(arr1, arr2)
result_not = np.bitwise_not(arr1)

print("AND:", result_and)  # [False, False, False]
print("OR:", result_or)    # [True, True, True]
print("XOR:", result_xor)  # [True, True, True]
print("NICHT:", result_not)  # [False, True, False]

# Bitweises NICHT
arr_invert = np.invert(np.array([1, 2], dtype=np.int8))
print("Invertieren:", arr_invert)  # [-2, -3]

# Linksverschiebungsoperation
arr_left_shift = np.left_shift(5, 2)
print("Linksverschiebung:", arr_left_shift)  # 20

# Rechtsverschiebungsoperation
arr_right_shift = np.right_shift(10, 1)
print("Rechtsverschiebung:", arr_right_shift)  # 5

Sie können auch"&", "~", "|" und "^"sowie andere Operatoren verwenden, um Berechnungen durchzuführen:

  1. AND-Operation (&):Wenn beide Ziffern an den entsprechenden Bits 1 sind, ist das Ergebnis 1; andernfalls ist das Ergebnis 0.

    Zum Beispiel: 1010 & 1100 = 1000

  2. OR-Operation (|):Wenn mindestens eine der beiden Ziffern an den entsprechenden Bits 1 ist, ist das Ergebnis 1; andernfalls ist das Ergebnis 0.

    Zum Beispiel: 1010 | 1100 = 1110

  3. XOR-Operation (^):Wenn die beiden Ziffern an den entsprechenden Bits unterschiedlich sind, ist das Ergebnis 1; wenn sie gleich sind, ist das Ergebnis 0.

    Zum Beispiel: 1010 ^ 1100 = 0110

  4. NOT-Operation (~):Invertiert jedes Bit der Zahl, das heißt, 0 wird zu 1 und 1 wird zu 0.

    Zum Beispiel: ~1010 = 0101

  5. Linksverschiebung (<<):Verschiebt alle Bits der Zahl um die angegebene Anzahl von Bits nach links und füllt die rechte Seite mit Nullen auf.

    Zum Beispiel: 1010 << 2 = 101000

  6. Rechtsverschiebung (>>):Verschiebt alle Bits der Zahl um die angegebene Anzahl von Bits nach rechts und füllt die linke Seite je nach Vorzeichenbit oder mit Nullen auf.

    Zum Beispiel: 1010 >> 2 = 0010

bitwise_and

Die Funktion bitwise_and() führt eine bitweise UND-Operation auf der Binärform von Ganzzahlen in einem Array aus.

Beispiel

import numpy as np print ('Binärform von 13 und 17:') a,b = 13,17 print (bin(a), bin(b)) print ('\n') print ('Bitweises UND von 13 und 17:') print (np.bitwise_and(13, 17))

Das Ausgabeergebnis ist:

13 和 17 的二进制形式:
0b1101 0b10001


13 和 17 的位与:
1

Das obige Beispiel kann mit der folgenden Tabelle veranschaulicht werden:

1 1 0 1
AND
1 0 0 0 1
Operationsergebnis 0 0 0 0 1

Die Regeln für die bitweise UND-Operation lauten wie folgt:

A B AND
1 1 1
1 0 0
0 1 0
0 0 0

bitwise_or

Die Funktion bitwise_or() führt eine bitweise ODER-Operation auf der Binärform von Ganzzahlen in einem Array aus.

Beispiel

import numpy as np a,b = 13,17 print ('Binärform von 13 und 17:') print (bin(a), bin(b)) print ('Bitweises ODER von 13 und 17:') print (np.bitwise_or(13, 17))

Das Ausgabeergebnis ist:

13 和 17 的二进制形式:
0b1101 0b10001
13 和 17 的位或:
29

Das obige Beispiel kann mit der folgenden Tabelle veranschaulicht werden:

1 1 0 1
OR
1 0 0 0 1
Operationsergebnis 1 1 1 0 1

Die Regeln der bitweisen ODER-Operation sind wie folgt:

A B OR
1 1 1
1 0 1
0 1 1
0 0 0

invert

Die Funktion invert() führt eine bitweise NOT-Operation für Ganzzahlen in einem Array aus, das heißt, 0 wird zu 1 und 1 wird zu 0.

Bei vorzeichenbehafteten Ganzzahlen nimmt man das Komplement der Binärzahl und addiert dann 1. Wenn in einer Binärzahl das höchstwertige Bit 0 ist, zeigt dies eine positive Zahl an, und wenn das höchstwertige Bit 1 ist, zeigt dies eine negative Zahl an.

Schauen wir uns die Berechnungsschritte von ~1 an:

  • wird1(Dies nennt man: Originalcode) In Binär umwandeln =00000001
  • Bitweise Invertierung = 11111110
  • Wir stellen fest, dass das Vorzeichenbit (d. h. das höchstwertige Bit) ist1(was eine negative Zahl anzeigt), invertiere die übrigen Ziffern außer dem Vorzeichenbit =10000001
  • Addiere 1 zum letzten Bit, um das Komplement zu erhalten =10000010
  • Zurück in Dezimal umwandeln =-2
  • AusdruckBinärwert (Zweierkomplement)Dezimalwert
    5 00000000 00000000 00000000 000001015
    ~511111111 11111111 11111111 11111010 -6

Beispiel

import numpy as np print ('Bitweise Inversion von 13, wobei der dtype des ndarray uint8 ist:') print (np.invert(np.array([13], dtype = np.uint8))) print ('\n') # Wenn wir die Binärdarstellungen von 13 und 242 vergleichen, sehen wir die Bitinversion print ('Binärdarstellung von 13:') print (np.binary_repr(13, width = 8)) print ('\n') print ('Binärdarstellung von 242:') print (np.binary_repr(242, width = 8))

Das Ausgabeergebnis ist:

13 的位反转,其中 ndarray 的 dtype 是 uint8:
[242]


13 的二进制表示:
00001101


242 的二进制表示:
11110010

left_shift

Die Funktion left_shift() verschiebt die Binärform von Array-Elementen um eine angegebene Anzahl von Positionen nach links und hängt rechts eine entsprechende Anzahl von Nullen an.

Beispiel

import numpy as np print ('10 um zwei Bits nach links verschieben:') print (np.left_shift(10,2)) print ('\n') print ('Binärdarstellung von 10:') print (np.binary_repr(10, width = 8)) print ('\n') print ('Binärdarstellung von 40:') print (np.binary_repr(40, width = 8)) # Die beiden Bits in '00001010' wurden nach links verschoben und rechts wurden zwei Nullen hinzugefügt.

Das Ausgabeergebnis ist:

将 10 左移两位:
40


10 的二进制表示:
00001010


40 的二进制表示:
00101000

right_shift

Die Funktion right_shift() verschiebt die Binärform von Array-Elementen um eine angegebene Anzahl von Positionen nach rechts und hängt links eine gleiche Anzahl von Nullen an.

Beispiel

import numpy as np print ('Verschiebe 40 um zwei Bits nach rechts:') print (np.right_shift(40,2)) print ('\n') print ('Binärdarstellung von 40:') print (np.binary_repr(40, width = 8)) print ('\n') print ('Binärdarstellung von 10:') print (np.binary_repr(10, width = 8)) # Die beiden Bits in '00001010' wurden nach rechts verschoben und links wurden zwei Nullen hinzugefügt.

Das Ausgabeergebnis ist:

将 40 右移两位:
10


40 的二进制表示:
00101000


10 的二进制表示:
00001010
Weitere Erweiterungen