Skip to main content
IBM Quantum Platform
  • 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 nn Bits (oder Qubits) haben, werden Sie normalerweise jedes Bit mit 0→n−10 \rightarrow n-1 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 00 das oberste Qubit und das Qubit n−1n-1 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 00 das niederwertigste Bit und bit n−1n-1 das höchstwertige. Dies ist bei der Kodierung hilfreich, da jedes Bit den Wert den Wert 2label2^\text{label} hat (die Bezeichnung ist der Index des Qubits in QuantumCircuit.qubits). Die folgende Schaltungsausführung endet zum Beispiel mit dem Bit 00 als 0 und dem Bit 11 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 n−1n-1 das am weitesten links stehende Bit, und Bit 00 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 n−1n-1 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 00 im Zustand ∣+⟩|+\rangle, und qubit 11 im Zustand ∣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)}

Dies führt gelegentlich zu Verwirrung bei der Interpretation einer Bitfolge, da man erwarten könnte, dass das ganz linke Bit das Bit 00 ist, während es normalerweise das Bit n−1n-1.

Zustandsvektormatrizen

Bei der Darstellung eines Zustandsvektors als Liste von komplexen Zahlen (Amplituden), Ordnet Qiskit diese Amplituden so an, dass die Amplitude bei Index xx den Berechnungsbasiszustand ∣x⟩|x\rangle 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 00 die Steuerung und das Qubit 11 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 ∣01⟩↔∣11⟩|01\rangle \leftrightarrow |11\rangle durch, hat also die folgende Matrix.

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

Änderung der Reihenfolge in Qiskit

Um eine Schaltung mit Qubits in umgekehrter Reihenfolge zu zeichnen (d.h. Qubit 00 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 00.

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 11 wirkt.


Nächste Schritte

Empfehlungen
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.