Ergebnisse visualisieren
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
Plot-Histogramm
Die Funktion plot_histogram visualisiert das Ergebnis der Abtastung einer Quantenschaltung auf einer QPU.
Diese Funktion gibt ein matplotlib.Figure Objekt zurück. Wenn die letzte Zeile einer Codezelle diese Objekte ausgibt, werden sie in Jupyter-Notebooks unterhalb der Zelle angezeigt. Wenn Sie diese Funktionen in anderen Umgebungen oder in Skripten aufrufen, müssen Sie die Ausgaben explizit anzeigen oder speichern.
Zwei Optionen sind möglich:
- Rufen Sie
.show()für das zurückgegebene Objekt auf, um das Bild in einem neuen Fenster zu öffnen (vorausgesetzt, Ihr konfiguriertes Matplotlib-Backend ist interaktiv). - Rufen Sie
.savefig("out.png")auf, um die Abbildung unterout.pngim aktuellen Arbeitsverzeichnis zu speichern. Die Methodesavefig()benötigt einen Pfad, damit Sie den Speicherort und den Dateinamen für die Ausgabe anpassen können. Zum Beispielplot_state_city(psi).savefig("out.png").
Erstellen Sie zum Beispiel einen Zwei-Qubit-Bell-Zustand:
from qiskit.primitives import StatevectorSampler as Sampler
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.circuit import QuantumCircuit
from qiskit.visualization import plot_histogram# Quantum circuit to make a Bell state
bell = QuantumCircuit(2)
bell.h(0)
bell.cx(0, 1)
bell.measure_all()
pm = generate_preset_pass_manager(optimization_level=1)
isa_circuit = pm.run(bell)
# execute the quantum circuit
sampler = Sampler()
job = sampler.run([isa_circuit])
result = job.result()
print(result)Output:
PrimitiveResult([SamplerPubResult(data=DataBin(meas=BitArray(<shape=(), num_shots=1024, num_bits=2>)), metadata={'shots': 1024, 'circuit_metadata': {}})], metadata={'version': 2})
plot_histogram(result[0].data.meas.get_counts())Output:
Optionen beim Zeichnen eines Histogramms
Verwenden Sie die folgenden Optionen für plot_histogram , um die Ausgabegrafik anzupassen.
legend: Liefert eine Bezeichnung für die Ausführungen. Sie nimmt eine Liste von Zeichenketten auf, die zur Kennzeichnung der Ergebnisse jeder Ausführung verwendet werden. Dies ist vor allem dann nützlich, wenn mehrere Ausführungsergebnisse in einem Histogramm dargestellt werden sollensort: Passt die Reihenfolge der Balken im Histogramm an. Sie kann entweder in aufsteigender Reihenfolge mitascoder in absteigender Reihenfolge mitdescnumber_to_keep: Nimmt eine ganze Zahl für die Anzahl der anzuzeigenden Begriffe. Der Rest ist in einer einzigen Leiste mit der Bezeichnung "Rest" zusammengefasstcolor: Passt die Farbe der Balken an; nimmt einen String oder eine Liste von Strings für die Farben, die für die Balken für jede Ausführung verwendet werden sollenbar_labels: Legt fest, ob Etiketten über den Balken gedruckt werdenfigsize: Nimmt ein Tupel mit der Größe in Zoll auf, um die Zahl auszugeben
# Execute two-qubit Bell state again
job = sampler.run([isa_circuit], shots=1000)
second_result = job.result()
# Plot results with custom options
plot_histogram(
[
result[0].data.meas.get_counts(),
second_result[0].data.meas.get_counts(),
],
legend=["first", "second"],
sort="desc",
figsize=(15, 12),
color=["orange", "black"],
bar_labels=False,
)Output:
Ergebnisse des Plot Estimators
Qiskit verfügt nicht über eine eingebaute Funktion zur Darstellung von Estimator-Ergebnissen, aber Sie können Matplotlib 's bar plot für eine schnelle Visualisierung verwenden.
Zur Veranschaulichung schätzt die folgende Zelle die Erwartungswerte von sieben verschiedenen Observablen für einen Quantenzustand.
import numpy as np
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.primitives import StatevectorEstimator as Estimator
from qiskit.transpiler import generate_preset_pass_manager
from matplotlib import pyplot as plt
# Simple estimation experiment to create results
qc = QuantumCircuit(2)
qc.h(0)
qc.crx(1.5, 0, 1)
observables_labels = ["ZZ", "XX", "YZ", "ZY", "XY", "XZ", "ZX"]
observables = [SparsePauliOp(label) for label in observables_labels]
pm = generate_preset_pass_manager(optimization_level=1)
isa_circuit = pm.run(qc)
isa_observables = [
operator.apply_layout(isa_circuit.layout) for operator in observables
]
# Reshape observable array for broadcasting
reshaped_ops = np.fromiter(isa_observables, dtype=object)
reshaped_ops = reshaped_ops.reshape((7, 1))
estimator = Estimator()
job = estimator.run([(isa_circuit, reshaped_ops)])
result = job.result()[0]
exp_val = job.result()[0].data.evs
print(result)
# Since the result array is structured as a 2D array where each element is a
# list containing a single value, you need to flatten the array.
# Plot using Matplotlib
plt.bar(observables_labels, exp_val.flatten())Output:
PubResult(data=DataBin(evs=np.ndarray(<shape=(7, 1), dtype=float64>), stds=np.ndarray(<shape=(7, 1), dtype=float64>), shape=(7, 1)), metadata={'target_precision': 0.0, 'circuit_metadata': {}})
<BarContainer object of 7 artists>
Die folgende Zelle verwendet den geschätzten Standardfehler jedes Ergebnisses und fügt ihn als Fehlerbalken hinzu. Eine vollständige Beschreibung des Plots finden Sie in der Dokumentation bar .
standard_error = job.result()[0].data.stds
_, ax = plt.subplots()
ax.bar(
observables_labels,
exp_val.flatten(),
yerr=standard_error.flatten(),
capsize=2,
)
ax.set_title("Expectation values (with standard errors)")Output:
Text(0.5, 1.0, 'Expectation values (with standard errors)')