Skip to main content
IBM Quantum Platform

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.

Verwendung der Ausgabe von Funktionen

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 unter out.png im aktuellen Arbeitsverzeichnis zu speichern. Die Methode savefig() benötigt einen Pfad, damit Sie den Speicherort und den Dateinamen für die Ausgabe anpassen können. Zum Beispiel plot_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:

Output of the previous code cell

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 sollen
  • sort: Passt die Reihenfolge der Balken im Histogramm an. Sie kann entweder in aufsteigender Reihenfolge mit asc oder in absteigender Reihenfolge mit desc
  • number_to_keep: Nimmt eine ganze Zahl für die Anzahl der anzuzeigenden Begriffe. Der Rest ist in einer einzigen Leiste mit der Bezeichnung "Rest" zusammengefasst
  • color: 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 sollen
  • bar_labels: Legt fest, ob Etiketten über den Balken gedruckt werden
  • figsize: 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:

Output of the previous code cell

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>
Output of the previous code cell

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)')
Output of the previous code cell
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.