Skip to main content
IBM Quantum Platform

StatevectorSampler

class qiskit.primitives.StatevectorSampler(*, default_shots=1024, seed=None)

GitHub

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)

GitHub

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 ]]

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.