Skip to main content
IBM Quantum Platform

StatevectorSampler

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

GitHub

Basi: BaseSamplerV2

Semplice implementazione di BaseSamplerV2 utilizzando la simulazione vettoriale a stati completi.

Questa classe è implementata tramite Statevector che trasforma i circuiti forniti in puri vettori di stato ed è quindi incompatibile con le misure a metà circuito (anche se altre implementazioni potrebbero esserlo).

Come si vede nell'esempio seguente, questo campionatore supporta la fornitura di array di set di valori di parametri da associare a un singolo circuito.

Ogni tupla di (circuit, <optional> parameter values, <optional> shots), chiamata blocco primitivo unificato del campionatore ( PUB ), produce il proprio risultato di tipo array. Il run() metodo può essere dato a molti pub contemporaneamente.

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)

Parametri

  • default_shots (int) – Gli scatti predefiniti per il campionatore se non vengono specificati durante l'esecuzione.
  • seed (np.random.Generator | int | None) – Il seme o l'oggetto Generator per la generazione di numeri casuali. Se Nessuno, verrà utilizzato un RNG predefinito con seme casuale.

Attributi

default_shots

Restituire le inquadrature predefinite

seed

Restituisce il seme o l'oggetto Generator per la generazione di numeri casuali.


Metodi

run

run(pubs, *, shots=None)

GitHub

Eseguire e raccogliere campioni da ciascun pub.

Parametri

  • pubs (Iterable[TypeAliasForwardRef('SamplerPubLike')]) – Un iterabile di oggetti simili a pub. Ad esempio, un elenco di circuiti o di tuple (circuit, parameter_values).
  • shots (int | None) – Il numero totale di scatti da campionare per ogni pub campionatore che non specifica i propri scatti. Se None, verrà utilizzato il valore predefinito degli scatti della primitiva, che può variare a seconda dell'implementazione.

Risultati

L'oggetto di lavoro del risultato di Sampler.

Tipo di restituzione

PrimitiveJob [ PrimitiveResult [ SamplerPubResult ]]

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.