ויזואליזציה של תוצאות
גרסאות חבילות
הקוד בדף זה פותח עם הדרישות הבאות. אנו ממליצים להשתמש בגרסאות אלה או בגרסאות חדשות יותר.
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())
אפשרויות בעת הצגת היסטוגרמה
השתמשו באפשרויות הבאות עבור plot_histogram כדי לכוון את הגרף המוצג.
legend: מספק תוו ית להרצות. מקבל רשימה של מחרוזות לתיוג התוצאות של כל הרצה. שימושי בעיקר כאשר מציגים תוצאות של מספר הרצות באותה היסטוגרמהsort: מכוון את סדר העמודות בהיסטוגרמה. ניתן להגדיר סדר עולה עםascאו יורד עםdescnumber_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,
)
הצגת תוצאות 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>
התא הבא משתמש בשגיאת התקן המוערכת של כל תוצאה ומוסיף אותן כפסי שגיאה. ראו את תיעוד גרף 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)')