Visualizza i risultati
Il codice di questa pagina è stato sviluppato in base ai seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.
qiskit[all]~=2.5.1
Istogramma del grafico
La funzione plot_histogram visualizza il risultato del campionamento di un circuito quantistico su una QPU.
Questa funzione restituisce un oggetto matplotlib.Figure . Quando l'ultima riga di una cella di codice produce questi oggetti, i notebook Jupyter li visualizzano sotto la cella. Se si richiamano queste funzioni in altri ambienti o in script, è necessario mostrare o salvare esplicitamente gli output.
Le opzioni sono due:
- Chiamare
.show()sull'oggetto restituito per aprire l'immagine in una nuova finestra (supponendo che il backend matplotlib configurato sia interattivo). - Chiamare
.savefig("out.png")per salvare la figura inout.pngnella directory di lavoro corrente. Il metodosavefig()accetta un percorso, in modo da poter regolare la posizione e il nome del file in cui salvare l'output. Ad esempio,plot_state_city(psi).savefig("out.png").
Ad esempio, creare uno stato di Bell a due qubit:
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:
Opzioni per la creazione di un istogramma
Utilizzare le seguenti opzioni per plot_histogram per regolare il grafico di uscita.
legend: Fornisce un'etichetta per le esecuzioni. Prende un elenco di stringhe utilizzate per etichettare i risultati di ogni esecuzione. Questo è utile soprattutto quando si tracciano più risultati di esecuzione nello stesso istogrammasort: Regola l'ordine delle barre nell'istogramma. Si può impostare l'ordine ascendente conasco l'ordine discendente condescnumber_to_keep: Richiede un numero intero per il numero di termini da mostrare. Gli altri sono raggruppati in un'unica barra chiamata "riposo"color: Regola il colore delle barre; accetta una stringa o un elenco di stringhe per i colori da utilizzare per le barre per ogni esecuzionebar_labels: Regola se le etichette vengono stampate sopra le barrefigsize: Prende una tupla delle dimensioni in pollici per creare la figura di uscita
# 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:
Risultati dello strumento di stima dell'area
Qiskit non ha una funzione integrata per tracciare i risultati dell'Estimatore, ma puoi usare Matplotlib bar tracciare un grafico per una rapida visualizzazione.
Per dimostrarlo, la cella seguente stima i valori di aspettativa di sette diverse osservabili su uno stato quantistico.
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 cella seguente utilizza l' errore standard stimato di ciascun risultato e lo aggiunge come barre di errore. Vedi il bar documentazione della trama per una descrizione completa della 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)')