Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt. Wir empfehlen die Verwendung dieser oder neuerer Versionen.
qiskit[all]~=2.5.2
Bit-Reihenfolge im „ Qiskit SDK “
Wenn Sie einen Satz von Bits (oder Qubits) haben, werden Sie normalerweise jedes Bit mit bezeichnen. Verschiedene Softwares und Ressourcen müssen entscheiden, wie sie diese Bits sowohl im Computerspeicher als auch bei der Anzeige auf dem Bildschirm anordnen.
Qiskit-Konventionen
Hier sehen Sie, wie das Qiskit SDK Bits in verschiedenen Szenarien anordnet.
Basiselemente
Standardmäßig verwendet Qiskit die Little-Endian-Konvention für die Bitreihenfolge. Die Standardeinstellung für ist BitArray jedoch big (Endian), was zu einigen Abweichungen bei der Ausgabe der Primitive führt, je nachdem, ob die Primitive diese Einstellung ändert. Beispielsweise geben die Primitive „Service Sampler“ und „Estimator“ des „ IBM® Quantum Compute “ Ergebnisse im Big-Endian-Format zurück, während „Executor“ Ergebnisse im Little-Endian-Format zurückgibt.
Quantenschaltungen
Die Klasse QuantumCircuit speichert ihre Qubits in einer Liste (QuantumCircuit.qubits). Der Index eines Qubits in dieser Liste definiert das bezeichnung des Qubits.
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>
Schaltpläne
In einem Schaltplan ist das Qubit das oberste Qubit und das Qubit das unterste Qubit. Sie können dies ändern mit dem reverse_bits Argument von QuantumCircuit.draw (siehe Reihenfolge in Qiskit ändern ).
qc.x(1)
qc.draw()Output:
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Ganzzahlen
Bei der Interpretation der Bits als Zahl ist das Bit das niederwertigste Bit und bit das höchstwertige. Dies ist bei der Kodierung hilfreich, da jedes Bit den Wert den Wert hat (die Bezeichnung ist der Index des Qubits in QuantumCircuit.qubits). Die folgende Schaltungsausführung endet zum Beispiel mit dem Bit als 0 und dem Bit als 1. Dies wird interpretiert als die dezimale Ganzzahl 2 (gemessen mit der Wahrscheinlichkeit 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}
Zeichenfolgen
Wenn eine Liste von Bits (oder Qubits) als Zeichenkette angezeigt oder interpretiert wird, ist Bit das am weitesten links stehende Bit, und Bit das am weitesten rechts stehende Bit. Das liegt daran, dass wir zahlen normalerweise mit der höchstwertigen Stelle auf der linken Seite schreiben, und in Qiskit wird das Bit als das höchstwertige Bit interpretiert.
Zum Beispiel definiert die folgende Zelle einen "Zustandsvektor" aus einer Kette von ein-Qubit-Zuständen. In diesem Fall befindet sich das Qubit im Zustand , und qubit im Zustand .
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)}
Dies führt gelegentlich zu Verwirrung bei der Interpretation einer Bitfolge, da man erwarten könnte, dass das ganz linke Bit das Bit ist, während es normalerweise das Bit .
Zustandsvektormatrizen
Bei der Darstellung eines Zustandsvektors als Liste von komplexen Zahlen (Amplituden), Ordnet Qiskit diese Amplituden so an, dass die Amplitude bei Index den Berechnungsbasiszustand darstellt.
print(sv[1]) # amplitude of state |01>
print(sv[2]) # amplitude of state |10>Output:
(0.7071067811865475+0j)
0j
Gates
Jedes Gatter in Qiskit kann eine Liste von Qubits auf seine eigene Weise interpretieren, aber kontrollierte Gatter folgen normalerweise der Konvention (control, target).
Die folgende Zelle fügt zum Beispiel ein kontrolliertes X-Gatter hinzu, bei dem das Qubit die Steuerung und das Qubit das Ziel ist.
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()Output:
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
Gemäß den zuvor erwähnten Konventionen in Qiskit führt dieses CX-Tor die Transformation durch, hat also die folgende Matrix.
Änderung der Reihenfolge in Qiskit
Um eine Schaltung mit Qubits in umgekehrter Reihenfolge zu zeichnen (d.h. Qubit am unten), verwenden Sie das Argument reverse_bits . Dies betrifft nur das erzeugte diagramm und hat keinen Einfluss auf die Schaltung; das X-Gate wirkt weiterhin auf das Qubit .
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)Output:
q_1: ─────
┌───┐
q_0: ┤ X ├
└───┘
Sie können die Methode reverse_bits verwenden, um einen neuen Schaltkreis mit den qubits zurückgeben (die ursprüngliche Schaltung wird dabei nicht verändert).
qc.reverse_bits().draw()Output:
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Man beachte, dass in dieser neuen Schaltung das X-Gate auf das Qubit wirkt.
Nächste Schritte
- Ein Beispiel für die Verwendung von Schaltkreisen finden Sie im Lernprogramm Grovers Algorithmus.
- Erkunden Sie die QuantumCircuit API-Referenz.