StatevectorEstimator
class qiskit.primitives.StatevectorEstimator(*, default_precision=0.0, seed=None)
Bases: BaseEstimatorV2
Implementación sencilla de BaseEstimatorV2 con simulación completa de vectores de estado.
Esta clase se implementa mediante Statevector que convierte los circuitos proporcionados en puros vectores de estado. Estos estados son posteriormente actuados por SparsePauliOplo que implica que, en la actualidad, esta implementación sólo es compatible con observables basados en Pauli.
Cada tupla de (circuit, observables, <optional> parameter values, <optional> precision), denominada «bloque unificado primitivo estimador» (en inglés, PUB ), produce su propio resultado basado en una matriz. El run() método puede recibir una secuencia de publicaciones para ejecutar en una sola llamada.
El resultado de esta clase es exacto si el circuito contiene solo operaciones unitarias. Por otro lado, el resultado podría ser estocástico si el circuito contiene una operación no unitaria, como un reinicio para algunos subsistemas. El resultado estocástico puede hacerse reproducible estableciendo seed, por ejemplo, StatevectorEstimator(seed=123).
from qiskit.circuit import Parameter, QuantumCircuit
from qiskit.primitives import StatevectorEstimator
from qiskit.quantum_info import Pauli, SparsePauliOp
import matplotlib.pyplot as plt
import numpy as np
# Define a circuit with two parameters.
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.ry(Parameter("a"), 0)
circuit.rz(Parameter("b"), 0)
circuit.cx(0, 1)
circuit.h(0)
# Define a sweep over parameter values, where the second axis is over
# the two parameters in the circuit.
params = np.vstack([
np.linspace(-np.pi, np.pi, 100),
np.linspace(-4 * np.pi, 4 * np.pi, 100)
]).T
# Define three observables. Many formats are supported here including
# classes such as qiskit.quantum_info.SparsePauliOp. The inner length-1
# lists cause this array of observables to have shape (3, 1), rather
# than shape (3,) if they were omitted.
observables = [
[SparsePauliOp(["XX", "IY"], [0.5, 0.5])],
[Pauli("XX")],
[Pauli("IY")]
]
# Instantiate a new statevector simulation based estimator object.
estimator = StatevectorEstimator()
# Estimate the expectation value for all 300 combinations of
# observables and parameter values, where the pub result will have
# shape (3, 100). This shape is due to our array of parameter
# bindings having shape (100,), combined with our array of observables
# having shape (3, 1)
pub = (circuit, observables, params)
job = estimator.run([pub])
# Extract the result for the 0th pub (this example only has one pub).
result = job.result()[0]
# Error-bar information is also available, but the error is 0
# for this StatevectorEstimator.
result.data.stds
# Pull out the array-based expectation value estimate data from the
# result and plot a trace for each observable.
for idx, pauli in enumerate(observables):
plt.plot(result.data.evs[idx], label=pauli)
plt.legend()
Parámetros
- default_precision (float) – La precisión por defecto para el estimador si no se especifica durante la ejecución.
- seed (np.random.Generator | int | None) – La semilla o el objeto Generador para la generación de números aleatorios. Si es Ninguno, se utilizará un RNG aleatorio por defecto.
Atributos
default_precision
Devuelve la precisión por defecto
seed
Devuelve la semilla o el objeto Generador para la generación de números aleatorios.
Métodos
run
run(pubs, *, precision=None)
Estimar los valores de expectativa para cada pub proporcionado (Bloque Primitivo Unificado).
Parámetros
- pubs (Iterable[TypeAliasForwardRef('EstimatorPubLike')]) – Una secuencia de objetos similares a «pub», como tuplas
(circuit, observables)o(circuit, observables, parameter_values). - precision (float | None) – La precisión objetivo para las estimaciones del valor de expectativa de cada ejecución Estimador Pub que no especifica su propia precisión. Si es Ninguno, se utilizará el valor de precisión por defecto del estimador.
Devuelve
Un objeto de trabajo que contiene resultados.
Tipo de retorno