StatevectorSampler
class qiskit.primitives.StatevectorSampler(*, default_shots=1024, seed=None)
Bases : BaseSamplerV2
Mise en œuvre simple de BaseSamplerV2 à l'aide d'une simulation complète du vecteur d'état.
Cette classe est implémentée via Statevector qui transforme les circuits fournis en vecteurs d'état purs, et est donc incompatible avec les mesures en milieu de circuit (bien que d'autres implémentations puissent l'être).
Comme le montre l'exemple ci-dessous, cet échantillonneur permet de fournir des tableaux d'ensembles de valeurs de paramètres à lier à un seul circuit.
Chaque tuple de (circuit, <optional> parameter values, <optional> shots), appelé bloc unifié primitif de l'échantillonneur ( PUB ), produit son propre résultat sous forme de tableau. La méthode run() la méthode peut être appliquée à plusieurs pubs à la fois.
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)Paramètres
- default_shots (int) – Les plans par défaut de l'échantillonneur s'ils ne sont pas spécifiés lors de l'exécution.
- seed (np.random.Generator | int | None) – La graine ou l'objet Générateur pour la génération de nombres aléatoires. Si None, un RNG aléatoire par défaut sera utilisé.
Attributs
default_shots
Retourner aux prises de vue par défaut
seed
Renvoie la graine ou l'objet Generator pour la génération de nombres aléatoires.
Méthodes
run
run(pubs, *, shots=None)
Effectuer et prélever des échantillons dans chaque pub.
Paramètres
- pubs (Iterable[TypeAliasForwardRef('SamplerPubLike')]) – Une collection d'objets de type « pub ». Par exemple, une liste de circuits ou de tuples
(circuit, parameter_values). - shots (int | None) – Le nombre total de plans à échantillonner pour chaque pub échantillonneur qui ne spécifie pas ses propres plans. Si
None, la valeur par défaut de la primitive sera utilisée, ce qui peut varier en fonction de l'implémentation.
Retours
L'objet du résultat de l'échantillonneur.
Type de retour