Opérations bit à bit NumPy

Les opérations bit à bit sont une classe d'opérations effectuées au niveau des bits des nombres binaires. Elles opèrent directement sur les bits individuels des nombres binaires sans tenir compte de la valeur globale du nombre.

NumPy fournit une série de fonctions d'opérations bit à bit qui permettent d'effectuer des opérations bit à bit sur les éléments des tableaux. Ces opérations sont similaires aux opérateurs bit à bit de Python, mais elles agissent sur les tableaux NumPy, prennent en charge le traitement vectorisé et offrent des performances supérieures.

Les opérations bit à bit sont largement utilisées en informatique pour l'optimisation et le traitement de données de bas niveau.

NumPy bitwise_Les fonctions commençant par "bitwise" sont des fonctions d'opération bit à bit.

Les opérations bit à bit de NumPy incluent les fonctions suivantes :

OpérationFonction/OpérateurDescription
ET bit à bitnumpy.bitwise_and(x1, x2)Effectue une opération AND bit à bit sur chaque élément du tableau.
OU bit à bitnumpy.bitwise_or(x1, x2)Effectue une opération OR bit à bit sur chaque élément du tableau.
OU exclusif bit à bitnumpy.bitwise_xor(x1, x2)Effectue une opération XOR bit à bit sur chaque élément du tableau.
NON bit à bitnumpy.invert(x)Effectue une opération NOT bit à bit sur chaque élément du tableau.
Décalage à gauchenumpy.left_shift(x1, x2)Décale chaque élément du tableau vers la gauche du nombre de bits spécifié.
Décalage à droitenumpy.right_shift(x1, x2)Décale chaque élément du tableau vers la droite du nombre de bits spécifié.

Exemple

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("NOT:", result_not)  # [False, True, False]

# NON bit à bit
arr_invert = np.invert(np.array([1, 2], dtype=np.int8))
print("Invert:", arr_invert)  # [-2, -3]

# Opération de décalage à gauche
arr_left_shift = np.left_shift(5, 2)
print("Left Shift:", arr_left_shift)  # 20

# Opération de décalage à droite
arr_right_shift = np.right_shift(10, 1)
print("Right Shift:", arr_right_shift)  # 5

Vous pouvez également utiliser"&", "~", "|" et "^"et d'autres opérateurs pour effectuer des calculs :

  1. Opération AND (&) :Lorsque les deux chiffres sur les bits correspondants sont 1, le résultat est 1 ; sinon, le résultat est 0.

    Par exemple : 1010 & 1100 = 1000

  2. Opération OU (|) :Lorsqu'au moins un des deux chiffres des bits correspondants est 1, le résultat est 1 ; sinon, le résultat est 0.

    Par exemple : 1010 | 1100 = 1110

  3. Opération OU exclusif (^) :Lorsque les deux chiffres des bits correspondants sont différents, le résultat est 1 ; lorsqu'ils sont identiques, le résultat est 0.

    Par exemple : 1010 ^ 1100 = 0110

  4. Opération NON (~) :Inverse chaque bit du nombre, c'est-à-dire que 0 devient 1 et 1 devient 0.

    Par exemple : ~1010 = 0101

  5. Opération de décalage à gauche (<<) :Décale tous les bits du nombre vers la gauche du nombre de bits spécifié, en remplissant le côté droit avec des 0.

    Par exemple : 1010 << 2 = 101000

  6. Opération de décalage à droite (>>) :Décale tous les bits du nombre vers la droite du nombre de bits spécifié, en remplissant le côté gauche selon le bit de signe ou avec des zéros.

    Par exemple : 1010 >> 2 = 0010

bitwise_and

La fonction bitwise_and() effectue une opération ET bit à bit sur la forme binaire des entiers d'un tableau.

Exemple

import numpy as np print ('Forme binaire de 13 et 17 :') a,b = 13,17 print (bin(a), bin(b)) print ('\n') print ('ET bit à bit de 13 et 17 :') print (np.bitwise_and(13, 17))

Le résultat de sortie est:

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


13 和 17 的位与:
1

L'exemple ci-dessus peut être illustré par le tableau suivant :

1 1 0 1
ET
1 0 0 0 1
Résultat de l'opération 0 0 0 0 1

Les règles de l'opération ET bit à bit sont les suivantes :

A B ET
1 1 1
1 0 0
0 1 0
0 0 0

bitwise_or

La fonction bitwise_or() effectue une opération OU bit à bit sur la forme binaire des entiers d'un tableau.

Exemple

import numpy as np a,b = 13,17 print ('Forme binaire de 13 et 17 :') print (bin(a), bin(b)) print ('OU bit à bit de 13 et 17 :') print (np.bitwise_or(13, 17))

Le résultat de sortie est:

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

L'exemple ci-dessus peut être illustré par le tableau suivant :

1 1 0 1
OR
1 0 0 0 1
Résultat de l'opération 1 1 1 0 1

Les règles de l'opération OU bit à bit sont les suivantes :

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

invert

La fonction invert() effectue une opération NON bit à bit sur les entiers d'un tableau, c'est-à-dire que 0 devient 1 et 1 devient 0.

Pour les entiers signés, prenez le complément du nombre binaire, puis ajoutez 1. Dans un nombre binaire, le bit de poids fort valant 0 indique un nombre positif, et le bit de poids fort valant 1 indique un nombre négatif.

Regardons les étapes de calcul de ~1 :

  • va1(Ceci s'appelle : code original) Convertir en binaire =00000001
  • Inversion bit à bit = 11111110
  • Nous constatons que le bit de signe (c'est-à-dire le bit de poids fort) est1(indiquant un nombre négatif), inversez les autres chiffres sauf le bit de signe =10000001
  • Ajoutez 1 au dernier bit pour obtenir son complément =10000010
  • Reconvertir en décimal =-2
  • ExpressionValeur binaire (complément à deux)Valeur décimale
    5 00000000 00000000 00000000 000001015
    ~511111111 11111111 11111111 11111010 -6

Exemple

import numpy as np print ('Inversion bit à bit de 13, où le dtype du ndarray est uint8 :') print (np.invert(np.array([13], dtype = np.uint8))) print ('\n') # En comparant les représentations binaires de 13 et 242, on peut voir l'inversion des bits print ('Représentation binaire de 13 :') print (np.binary_repr(13, width = 8)) print ('\n') print ('Représentation binaire de 242 :') print (np.binary_repr(242, width = 8))

Le résultat de sortie est:

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


13 的二进制表示:
00001101


242 的二进制表示:
11110010

left_shift

La fonction left_shift() décale la forme binaire des éléments du tableau vers la gauche d'un nombre spécifié de positions, en ajoutant un nombre égal de 0 à droite.

Exemple

import numpy as np print ('Décaler 10 vers la gauche de deux bits :') print (np.left_shift(10,2)) print ('\n') print ('Représentation binaire de 10 :') print (np.binary_repr(10, width = 8)) print ('\n') print ('Représentation binaire de 40 :') print (np.binary_repr(40, width = 8)) # Les deux bits de '00001010' ont été déplacés vers la gauche, et deux 0 ont été ajoutés à droite.

Le résultat de sortie est:

将 10 左移两位:
40


10 的二进制表示:
00001010


40 的二进制表示:
00101000

right_shift

La fonction right_shift() décale la forme binaire des éléments d'un tableau vers la droite d'un nombre spécifié de positions, en ajoutant un nombre égal de 0 à gauche.

Exemple

import numpy as np print ('Décaler 40 vers la droite de deux bits :') print (np.right_shift(40,2)) print ('\n') print ('Représentation binaire de 40 :') print (np.binary_repr(40, width = 8)) print ('\n') print ('Représentation binaire de 10 :') print (np.binary_repr(10, width = 8)) # Les deux bits de '00001010' ont été déplacés vers la droite, et deux 0 ont été ajoutés à gauche.

Le résultat de sortie est:

将 40 右移两位:
10


40 的二进制表示:
00101000


10 的二进制表示:
00001010
Autres extensions