דלג לתוכן הראשי

ויזואליזציה של תוצאות

גרסאות חבילות

הקוד בדף זה פותח עם הדרישות הבאות. אנו ממליצים להשתמש בגרסאות אלה או בגרסאות חדשות יותר.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

הצגת היסטוגרמה

הפונקציה plot_histogram מציגה באופן ויזואלי את תוצאת הדגימה של Circuit קוונטי על QPU.

שימוש בפלט של פונקציות

פונקציה זו מחזירה אובייקט מסוג matplotlib.Figure. כאשר השורה האחרונה בתא קוד מחזירה אובייקטים כאלה, Jupyter notebooks מציגים אותם מתחת לתא. אם אתם קוראים לפונקציות אלה בסביבות אחרות או בסקריפטים, תצטרכו להציג או לשמור את הפלט בצורה מפורשת.

שתי אפשרויות הן:

  • קראו ל-.show() על האובייקט המוחזר כדי לפתוח את התמונה בחלון חדש (בהנחה שה-backend של matplotlib שהגדרתם הוא אינטראקטיבי).
  • קראו ל-.savefig("out.png") כדי לשמור את הגרף כקובץ out.png בתיקיית העבודה הנוכחית. המתודה savefig() מקבלת נתיב, כך שתוכלו לשנות את המיקום ושם הקובץ שבו אתם שומרים את הפלט. לדוגמה, plot_state_city(psi).savefig("out.png").

לדוגמה, בנו מצב Bell של שני Qubit:

# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
from qiskit.transpiler import generate_preset_pass_manager

from qiskit.circuit import QuantumCircuit
from qiskit.visualization import plot_histogram

service = QiskitRuntimeService()

backend = service.least_busy(simulator=False, operational=True)
# 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(backend=backend, optimization_level=1)
isa_circuit = pm.run(bell)

# execute the quantum circuit
sampler = Sampler(backend)
job = sampler.run([isa_circuit])
result = job.result()

print(result)
PrimitiveResult([SamplerPubResult(data=DataBin(meas=BitArray(<shape=(), num_shots=4096, num_bits=2>)), metadata={'circuit_metadata': {}})], metadata={'execution': {'execution_spans': ExecutionSpans([DoubleSliceSpan(<start='2026-01-15 07:11:30', stop='2026-01-15 07:11:32', size=4096>)])}, 'version': 2})
plot_histogram(result[0].data.meas.get_counts())

Output of the previous code cell

אפשרויות בעת הצגת היסטוגרמה

השתמשו באפשרויות הבאות עבור plot_histogram כדי לכוון את הגרף המוצג.

  • legend: מספק תווית להרצות. מקבל רשימה של מחרוזות לתיוג התוצאות של כל הרצה. שימושי בעיקר כאשר מציגים תוצאות של מספר הרצות באותה היסטוגרמה
  • sort: מכוון את סדר העמודות בהיסטוגרמה. ניתן להגדיר סדר עולה עם asc או יורד עם desc
  • number_to_keep: מקבל מספר שלם עבור כמות הפריטים להצגה. השאר מקובצים יחד בעמודה בודדת בשם "rest"
  • color: מכוון את צבע העמודות; מקבל מחרוזת או רשימה של מחרוזות עבור הצבעים לשימוש בעמודות של כל הרצה
  • bar_labels: מכוון האם תוויות מודפסות מעל העמודות
  • figsize: מקבל tuple עם הגודל באינצ'ים עבור גרף הפלט
# Execute two-qubit Bell state again
sampler.options.default_shots = 1000

job = sampler.run([isa_circuit])
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 of the previous code cell

הצגת תוצאות Estimator

ל-Qiskit אין פונקציה מובנית להצגת תוצאות Estimator, אך ניתן להשתמש בגרף bar של Matplotlib לצורך ויזואליזציה מהירה.

להדגמה, התא הבא מעריך את ערכי הציפייה של שבעה אופרטורים שונים על מצב קוונטי.

import numpy as np
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit_ibm_runtime import EstimatorV2 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]

service = QiskitRuntimeService()

pm = generate_preset_pass_manager(backend=backend, 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(backend)
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())
PubResult(data=DataBin(evs=np.ndarray(<shape=(7, 1), dtype=float64>), stds=np.ndarray(<shape=(7, 1), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(7, 1), dtype=float64>), shape=(7, 1)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})
<BarContainer object of 7 artists>

Output of the previous code cell

התא הבא משתמש בשגיאת התקן המוערכת של כל תוצאה ומוסיף אותן כפסי שגיאה. ראו את תיעוד גרף 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)")
Text(0.5, 1.0, 'Expectation values (with standard errors)')

Output of the previous code cell