Visualizar resultados
El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o versiones más recientes.
qiskit[all]~=2.5.0
Histograma de trama
La función plot_histogram visualiza el resultado del muestreo de un circuito cuántico en una QPU.
Esta función devuelve un objeto matplotlib.Figure . Cuando la última línea de una celda de código produce estos objetos, los cuadernos Jupyter los muestran debajo de la celda. Si llama a estas funciones en otros entornos o en scripts, tendrá que mostrar o guardar explícitamente las salidas.
Hay dos opciones:
- Llame a
.show()en el objeto devuelto para abrir la imagen en una nueva ventana (suponiendo que su backend matplotlib configurado es interactivo). - Llame a
.savefig("out.png")para guardar la figura enout.pngen el directorio de trabajo actual. El métodosavefig()toma una ruta para que pueda ajustar la ubicación y el nombre del archivo donde guardará la salida. Por ejemplo,plot_state_city(psi).savefig("out.png").
Por ejemplo, hacer un estado Bell de dos qubits:
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:
Opciones al trazar un histograma
Utilice las siguientes opciones de plot_histogram para ajustar el gráfico de salida.
legend: Proporciona una etiqueta para las ejecuciones. Toma una lista de cadenas utilizadas para etiquetar los resultados de cada ejecución. Esto es útil sobre todo cuando se trazan múltiples resultados de ejecución en el mismo histogramasort: Ajusta el orden de las barras en el histograma. Puede establecerse en orden ascendente conasco descendente condescnumber_to_keep: Toma un número entero para el número de términos a mostrar. El resto se agrupan en una única barra denominada "descanso"color: Ajusta el color de las barras; toma una cadena o una lista de cadenas para los colores a utilizar para las barras en cada ejecuciónbar_labels: Ajusta si las etiquetas se imprimen por encima de las barrasfigsize: Toma una tupla del tamaño en pulgadas para hacer la cifra de salida
# 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:
Resultados del estimador de parcelas
Qiskit no tiene una función incorporada para trazar los resultados del Estimador, pero puede utilizar Matplotlib 's bar plot para una visualización rápida.
Para demostrarlo, la siguiente celda estima los valores de expectativa de siete observables diferentes sobre un estado cuántico.
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>
La siguiente celda utiliza el error estándar estimado de cada resultado y los añade como barras de error. Consulte la documentación de la trama bar para obtener una descripción completa de la trama.
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)')