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 bits (ou qubits), vous étiquerez généralement chaque bit . 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 est le qubit le plus haut et le qubit 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 est le bit le moins significatif, et le bit le bit est le plus important. Ceci est utile lors du codage car chaque bit a une valeur la valeur (l'étiquette étant l'index du qubit dans QuantumCircuit.qubits). Par exemple, l'exécution du circuit suivant se termine le bit étant 0, et le bit é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 est le bit le plus à gauche et le bit 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 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 est dans l'état , et le qubit dans l'état le qubit dans l'état .
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 , alors qu'il représente généralement le bit .
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 représente l'état de la base de calcul .
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 est le contrôle et le qubit la cible le contrôle et le qubit 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 , et possède donc la matrice suivante.
Modification de l'ordre dans Qiskit
Pour dessiner un circuit avec les qubits dans l'ordre inverse (c'est-à-dire le qubit 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 .
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 .
Etapes suivantes
- Voir un exemple d'utilisation de circuits dans le didacticiel sur l 'algorithme de Grover.
- Explorez la référence de l 'API QuantumCircuit.