Skip to main content
IBM Quantum Platform
  • Le code de cette page a été développé en tenant compte des exigences suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.

    qiskit[all]~=2.5.1
    

Ordre des bits dans l' Qiskit SDK

Si vous disposez d'un ensemble de nn bits (ou qubits), vous étiquerez généralement chaque bit 0n10 \rightarrow n-1. Les différents logiciels et ressources doivent choisir la manière dont ils ordonnent ces bits à la fois dans la mémoire de l'ordinateur et lorsqu'ils sont affichés à l'écran.


Conventions Qiskit

Voici comment le SDK Qiskit ordonne les bits dans différents scénarios.

Circuits quantiques

La classe QuantumCircuit stocke ses qubits dans une liste (QuantumCircuit.qubits). L'indice d'un qubit dans cette liste définit l'étiquette du qubit qubit.

from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import Qubit

qc = QuantumCircuit(2)
qc.qubits[0]  # qubit "0"

Qubit(QuantumRegister(2, "q"), 0)

Output:

<Qubit register=(2, "q"), index=0>

Schémas de circuits

Sur un schéma de circuit, le qubit 00 est le qubit le plus haut et le qubit n1n-1 le qubit le plus bas le qubit le plus bas. Vous pouvez changer cela avec l'argument reverse_bits de QuantumCircuit.draw (voir Changer l'ordre dans Qiskit ).

qc.x(1)
qc.draw()

Output:

          
q_0: ─────
     ┌───┐
q_1: ┤ X ├
     └───┘

Entiers

Lorsque l'on interprète les bits comme un nombre, le bit 00 est le bit le moins significatif, et le bit le bit n1n-1 est le plus important. Ceci est utile lors du codage car chaque bit a une valeur la valeur 2label2^\text{label} (l'étiquette étant l'index du qubit dans QuantumCircuit.qubits). Par exemple, l'exécution du circuit suivant se termine le bit 00 étant 0, et le bit 11 étant 1. Il est interprété comme un entier décimal 2 (mesuré avec la probabilité 1.0).

from qiskit.primitives import StatevectorSampler as Sampler

qc.measure_all()

job = Sampler().run([qc])
result = job.result()
print(f" > Counts: {result[0].data.meas.get_counts()}")

Output:

 > Counts: {'10': 1024}

Chaînes

Lors de l'affichage ou de l'interprétation d'une liste de bits (ou de qubits) sous la forme d'une chaîne, le bit n1n-1 est le bit le plus à gauche et le bit 00 est le bit le plus à droite. Cela s'explique par le fait que nous écrivons généralement les nombres avec le chiffre le plus significatif à gauche, et dans Qiskit, le bit est interprété comme le bit le plus significatif Qiskit, le bit n1n-1 est interprété comme le bit le plus significatif.

Par exemple, la cellule suivante définit un "vecteur d'état" à partir d'une chaîne d'états à un qubit d'états à un qubit. Dans ce cas, le qubit 00 est dans l'état +|+\rangle, et le qubit dans l'état le qubit 11 dans l'état 0|0\rangle.

from qiskit.quantum_info import Statevector

sv = Statevector.from_label("0+")
sv.probabilities_dict()

Output:

{np.str_('00'): np.float64(0.4999999999999999),
 np.str_('01'): np.float64(0.4999999999999999)}

Cela peut parfois prêter à confusion lorsqu'il s'agit d'interpréter une chaîne de bits on pourrait s'attendre à ce que le bit le plus à gauche soit le bit 00, alors qu'il représente généralement le bit n1n-1.

Matrices de vecteurs d'état

Lorsqu'on représente un vecteur d'état sous la forme d'une liste de nombres complexes (amplitudes), Qiskit ordonne ces amplitudes de telle sorte que l'amplitude à l'index xx représente l'état de la base de calcul x|x\rangle.

print(sv[1])  # amplitude of state |01>
print(sv[2])  # amplitude of state |10>

Output:

(0.7071067811865475+0j)
0j

Accès

Chaque porte de Qiskit peut interpréter une liste de qubits à sa manière, mais les portes contrôlées suivent généralement la convention mais les portes contrôlées suivent généralement la convention (control, target).

Par exemple, la cellule suivante ajoute une porte X contrôlée où le qubit 00 est le contrôle et le qubit la cible le contrôle et le qubit 11 est la cible.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()

Output:

          
q_0: ──■──
     ┌─┴─┐
q_1: ┤ X ├
     └───┘

En suivant toutes les conventions mentionnées précédemment dans Qiskit, cette porte CX effectue la transformation 0111|01\rangle \leftrightarrow |11\rangle, et possède donc la matrice suivante.

(1000000100100100)\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ \end{pmatrix}

Modification de l'ordre dans Qiskit

Pour dessiner un circuit avec les qubits dans l'ordre inverse (c'est-à-dire le qubit 00 en bas), utilisez l'argument en bas), utilisez l'argument reverse_bits . Cela n'affecte que le diagramme généré et n'affecte pas le circuit et n'affecte pas le circuit; la porte X agit toujours sur le qubit 00.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)

Output:

          
q_1: ─────
     ┌───┐
q_0: ┤ X ├
     └───┘

Vous pouvez utiliser la méthode reverse_bits pour renvoyer un nouveau circuit avec les étiquettes des qubits inversées (cela ne modifie pas le circuit original) qubits inversés (cela ne modifie pas le circuit d'origine).

qc.reverse_bits().draw()

Output:

          
q_0: ─────
     ┌───┐
q_1: ┤ X ├
     └───┘

Notez que dans ce nouveau circuit, la porte X agit sur le qubit 11.


Etapes suivantes

Recommandations
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.