Zum Hauptinhalt springen
Dieses Projekt befindet sich in der Beta-Phase. Einen Fehler gefunden? GitHub Issue erstellen. Frage oder Idee? In Discussions fragen — wir freuen uns über dein Feedback!
Wie ist die Übersetzungsqualität auf dieser Seite?

Schaltkreise visualisieren

Paketversionen

Der Code auf dieser Seite wurde mit den folgenden Anforderungen entwickelt. Wir empfehlen, diese oder neuere Versionen zu verwenden.

qiskit[all]~=2.5.2

Es ist oft nützlich, die Schaltkreise zu sehen, die du erstellst. Verwende die folgenden Optionen, um Qiskit-Schaltkreise anzuzeigen.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit import QuantumCircuit

Einen Quantenschaltkreis zeichnen​

Die QuantumCircuit-Klasse unterstützt das Zeichnen von Schaltkreisen durch die draw()-Methode oder durch Ausgeben des Schaltkreisobjekts. Standardmäßig rendern beide eine ASCII-Art-Version des Schaltkreisdiagramms.

Beachte, dass print None zurückgibt, aber als Nebeneffekt das Diagramm ausgibt, während QuantumCircuit.draw das Diagramm ohne Nebeneffekte zurückgibt. Da Jupyter Notebooks die Ausgabe der letzten Zeile jeder Zelle anzeigen, scheinen sie den gleichen Effekt zu haben.

# Build a quantum circuit
circuit = QuantumCircuit(3, 3)
circuit.x(1)
circuit.h(range(3))
circuit.cx(0, 1)
circuit.measure(range(3), range(3));
print(circuit)
┌───┐ ┌─┐
q_0: ┤ H ├───────■──┤M├───
├───┤┌───┐┌─┴─┐└╥┘┌─┐
q_1: ┤ X ├┤ H ├┤ X ├─╫─┤M├
├───┤└┬─┬┘└───┘ ║ └╥┘
q_2: ┤ H ├─┤M├───────╫──╫─
└───┘ └╥┘ ║ ║
c: 3/═══════╩════════╩══╩═
2 0 1
circuit.draw()
┌───┐ ┌─┐
q_0: ┤ H ├───────■──┤M├───
├───┤┌───┐┌─┴─┐└╥┘┌─┐
q_1: ┤ X ├┤ H ├┤ X ├─╫─┤M├
├───┤└┬─┬┘└───┘ ║ └╥┘
q_2: ┤ H ├─┤M├───────╫──╫─
└───┘ └╥┘ ║ ║
c: 3/═══════╩════════╩══╩═
2 0 1

Alternative Renderer​

Eine Textausgabe ist nützlich, um die Ausgabe während der Entwicklung eines Schaltkreises schnell zu sehen, bietet aber nicht die größte Flexibilität. Es gibt zwei alternative Ausgabe-Renderer für den Quantenschaltkreis. Einer verwendet Matplotlib und der andere verwendet LaTeX. Der LaTeX-Renderer erfordert das qcircuit-Paket. Wähle diese Renderer aus, indem du das "output"-Argument auf die Strings mpl und latex setzt.

tipp

OSX-Benutzer können die erforderlichen LaTeX-Pakete über das mactex-Paket erhalten.

# Matplotlib drawing
circuit.draw(output="mpl")

Output of the previous code cell

# Latex drawing
circuit.draw(output="latex")

Output of the previous code cell

Ausgabe speichern​

Das Zeichnen eines großen Schaltkreises inline in einem Jupyter Notebook kann langsam oder unleserlich sein. Du kannst das Diagramm direkt in eine Datei speichern, diese dann in einem Bildbetrachter öffnen und nach Bedarf hineinzoomen.

# Save as an image using the Matplotlib drawer
circuit.draw(output="mpl", filename="circuit-mpl.jpeg")

Output of the previous code cell

# Or save a LaTeX rendering
circuit.draw(output="latex", filename="circuit-latex.pdf")

Output of the previous code cell

Schaltkreiszeichnungen steuern​

Standardmäßig gibt die draw() Methode das gerenderte Bild als Objekt zurück und gibt nichts aus. Die genaue zurückgegebene Klasse hängt von der angegebenen Ausgabe ab: 'text' (die Standardeinstellung) gibt ein TextDrawer Objekt zurück, 'mpl' gibt ein matplotlib.Figure Objekt zurück, und latex gibt ein PIL.Image Objekt zurück. Jupyter Notebooks verstehen diese Rückgabetypen und rendern sie ordnungsgemäß, aber beim Ausführen außerhalb von Jupyter werden Bilder nicht automatisch angezeigt.

Die draw() Methode hat optionale Argumente, um die Ausgabe anzuzeigen oder zu speichern. Wenn angegeben, nimmt das filename kwarg einen Pfad, unter dem die gerenderte Ausgabe gespeichert wird. Alternativ kannst du, wenn du die mpl oder latex Ausgaben verwendest, das interactive kwarg verwenden, um das Bild in einem neuen Fenster zu öffnen (dies funktioniert nicht immer innerhalb eines Notebooks).

Die Ausgabe anpassen​

Abhängig von der Ausgabe gibt es auch Optionen, um das Schaltkreisdiagramm anzupassen.

Plot-Barrieren deaktivieren und Bit-Reihenfolge umkehren​

Die ersten beiden Optionen werden von allen drei Backends gemeinsam genutzt. Sie ermöglichen es dir, sowohl die Bit-Reihenfolgen zu konfigurieren als auch zu entscheiden, ob du Barrieren zeichnen möchtest oder nicht. Diese können durch das reverse_bits kwarg bzw. das plot_barriers kwarg gesetzt werden. Die folgenden Beispiele funktionieren mit jedem Ausgabe-Renderer; mpl wird hier der Kürze halber verwendet.

from qiskit import QuantumRegister, ClassicalRegister

# Draw a new circuit with barriers and more registers
q_a = QuantumRegister(3, name="a")
q_b = QuantumRegister(5, name="b")
c_a = ClassicalRegister(3)
c_b = ClassicalRegister(5)

circuit = QuantumCircuit(q_a, q_b, c_a, c_b)
circuit.x(q_a[1])
circuit.x(q_b[1])
circuit.x(q_b[2])
circuit.x(q_b[4])
circuit.barrier()
circuit.h(q_a)
circuit.barrier(q_a)
circuit.h(q_b)
circuit.cswap(q_b[0], q_b[1], q_b[2])
circuit.cswap(q_b[2], q_b[3], q_b[4])
circuit.cswap(q_b[3], q_b[4], q_b[0])
circuit.barrier(q_b)
circuit.measure(q_a, c_a)
circuit.measure(q_b, c_b);
# Draw the circuit
circuit.draw(output="mpl")

Output of the previous code cell

# Draw the circuit with reversed bit order
circuit.draw(output="mpl", reverse_bits=True)

Output of the previous code cell

# Draw the circuit without barriers
circuit.draw(output="mpl", plot_barriers=False)

Output of the previous code cell

Renderer-spezifische Anpassungen​

Einige verfügbare Anpassungsoptionen sind spezifisch für einen Renderer.

Das fold-Argument setzt eine maximale Breite für die Ausgabe. Im text-Renderer setzt dies die Länge der Zeilen des Diagramms, bevor es in die nächste Zeile umbrochen wird. Bei Verwendung des 'mpl'-Renderers ist dies die Anzahl der (visuellen) Schichten, bevor in die nächste Zeile umgebrochen wird.

Der mpl Renderer hat das style kwarg, das die Farben und Umrisse ändert. Siehe die API-Dokumentation für weitere Details.

Die scale Option skaliert die Ausgabe der mpl und latex Renderer.

circuit = QuantumCircuit(1)
for _ in range(10):
circuit.h(0)
# limit line length to 40 characters
circuit.draw(output="text", fold=40)
┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐»
q: ┤ H ├┤ H ├┤ H ├┤ H ├┤ H ├┤ H ├┤ H ├»
└───┘└───┘└───┘└───┘└───┘└───┘└───┘»
« ┌───┐┌───┐┌───┐
«q: ┤ H ├┤ H ├┤ H ├
« └───┘└───┘└───┘
# Change the background color in mpl

style = {"backgroundcolor": "lightgreen"}
circuit.draw(output="mpl", style=style)

Output of the previous code cell

# Scale the mpl output to 1/2 the normal size
circuit.draw(output="mpl", scale=0.5)

Output of the previous code cell

Eigenständige Schaltkreis-Zeichnungsfunktion​

Falls du eine Anwendung hast, in der du es vorziehst, einen Schaltkreis mit einer eigenständigen Funktion anstatt als Methode eines Schaltkreisobjekts zu zeichnen, kannst du die circuit_drawer() Funktion direkt verwenden, die Teil der öffentlichen stabilen Schnittstelle von qiskit.visualization ist. Die Funktion verhält sich identisch zur circuit.draw() Methode, außer dass sie ein Schaltkreisobjekt als erforderliches Argument entgegennimmt.

from qiskit.visualization import circuit_drawer

circuit_drawer(circuit, output="mpl", plot_barriers=False)

Output of the previous code cell

Nächste Schritte​

Empfehlungen