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:
| Aktion | Funktion/Operator | Beschreibung |
|---|---|---|
| Bitweises AND | numpy.bitwise_and(x1, x2) | Führt eine bitweise UND-Operation für jedes Element des Arrays aus. |
| Bitweises OR | numpy.bitwise_or(x1, x2) | Führt eine bitweise ODER-Operation für jedes Element des Arrays aus. |
| Bitweises XOR | numpy.bitwise_xor(x1, x2) | Führt eine bitweise XOR-Operation für jedes Element des Arrays aus. |
| Bitweises NICHT | numpy.invert(x) | Führt eine bitweise NICHT-Operation für jedes Element des Arrays aus. |
| Linksverschiebung | numpy.left_shift(x1, x2) | Verschiebt jedes Element des Arrays um die angegebene Anzahl von Bits nach links. |
| Rechtsverschiebung | numpy.right_shift(x1, x2) | Verschiebt jedes Element des Arrays um die angegebene Anzahl von Bits nach rechts. |
Beispiel
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:
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
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
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
NOT-Operation (~):Invertiert jedes Bit der Zahl, das heißt, 0 wird zu 1 und 1 wird zu 0.
Zum Beispiel: ~1010 = 0101
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
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
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
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:
- wird
1(Dies nennt man: Originalcode) In Binär umwandeln =00000001 - Bitweise Invertierung =
11111110 - Wir stellen fest, dass das Vorzeichenbit (d. h. das höchstwertige Bit) ist
1(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
| Ausdruck | Binärwert (Zweierkomplement) | Dezimalwert |
|---|---|---|
| 5 | 00000000 00000000 00000000 00000101 | 5 |
| ~5 | 11111111 11111111 11111111 11111010 | -6 |
Beispiel
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
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
Das Ausgabeergebnis ist:
将 40 右移两位: 10 40 的二进制表示: 00101000 10 的二进制表示: 00001010Weitere Erweiterungen