StatevectorSampler
class qiskit.primitives.StatevectorSampler(*, default_shots=1024, seed=None)
Bases: BaseSamplerV2
Implementación sencilla de BaseSamplerV2 mediante simulación vectorial completa de estados.
Esta clase se implementa mediante Statevector que convierte los circuitos proporcionados en puros vectores de estado, por lo que es incompatible con las mediciones a mitad de circuito (aunque otras implementaciones pueden serlo).
Como se ve en el ejemplo siguiente, este muestreador permite proporcionar matrices de conjuntos de valores de parámetros para vincularlos a un único circuito.
Cada tupla de (circuit, <optional> parameter values, <optional> shots), denominada bloque unificado primitivo del muestreador ( PUB ), produce su propio resultado con valor de matriz. El método run() método se puede aplicar a muchos bares a la vez.
from qiskit.circuit import (
Parameter, QuantumCircuit, ClassicalRegister, QuantumRegister
)
from qiskit.primitives import StatevectorSampler
import matplotlib.pyplot as plt
import numpy as np
# Define our circuit registers, including classical registers
# called 'alpha' and 'beta'.
qreg = QuantumRegister(3)
alpha = ClassicalRegister(2, "alpha")
beta = ClassicalRegister(1, "beta")
# Define a quantum circuit with two parameters.
circuit = QuantumCircuit(qreg, alpha, beta)
circuit.h(0)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.ry(Parameter("a"), 0)
circuit.rz(Parameter("b"), 0)
circuit.cx(1, 2)
circuit.cx(0, 1)
circuit.h(0)
circuit.measure([0, 1], alpha)
circuit.measure([2], beta)
# 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
# Instantiate a new statevector simulation based sampler object.
sampler = StatevectorSampler()
# Start a job that will return shots for all 100 parameter value sets.
pub = (circuit, params)
job = sampler.run([pub], shots=256)
# Extract the result for the 0th pub (this example only has one pub).
result = job.result()[0]
# There is one BitArray object for each ClassicalRegister in the
# circuit. Here, we can see that the BitArray for alpha contains data
# for all 100 sweep points, and that it is indeed storing data for 2
# bits over 256 shots.
assert result.data.alpha.shape == (100,)
assert result.data.alpha.num_bits == 2
assert result.data.alpha.num_shots == 256
# We can work directly with a binary array in performant applications.
raw = result.data.alpha.array
# For small registers where it is anticipated to have many counts
# associated with the same bitstrings, we can turn the data from,
# for example, the 22nd sweep index into a dictionary of counts.
counts = result.data.alpha.get_counts(22)
# Or, convert into a list of bitstrings that preserve shot order.
bitstrings = result.data.alpha.get_bitstrings(22)
print(bitstrings)Parámetros
- default_shots (int) – Las tomas por defecto para el muestreador 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_shots
Volver a las tomas por defecto
seed
Devuelve la semilla o el objeto Generador para la generación de números aleatorios.
Métodos
run
run(pubs, *, shots=None)
Ejecutar y recoger muestras de cada pub.
Parámetros
- pubs (Iterable[TypeAliasForwardRef('SamplerPubLike')]) – Una secuencia de objetos similares a «pub». Por ejemplo, una lista de circuitos o tuplas
(circuit, parameter_values). - shots (int | None) – El número total de disparos a muestrear para cada pub muestreador que no especifique sus propios disparos. Si
None, se utilizará el valor de disparos por defecto de la primitiva, que puede variar según la implementación.
Devuelve
El objeto de trabajo del resultado de Sampler.
Tipo de retorno
TrabajoPrimitivo [ ResultadoPrimitivo [ ResultadoMuestreoPúblico ]]