PauliFeatureMap
class qiskit.circuit.library.PauliFeatureMap(feature_dimension=None, reps=2, entanglement='full', alpha=2.0, paulis=None, data_map_func=None, parameter_prefix='x', insert_barriers=False, name='PauliFeatureMap')
Basi: NLocal
Il circuito di espansione di Pauli.
Il circuito di espansione Pauli è un circuito di codifica dei dati che trasforma i dati di ingresso , dove n è il feature_dimension, come
Qui, è un insieme di indici di qubit che descrive le connessioni nella mappa delle caratteristiche, è un insieme che contiene tutti questi insiemi di indici e . Per impostazione predefinita, il data-mapping è
Le connessioni possibili possono essere impostate con gli argomenti entanglement e paulis . Ad esempio, per le rotazioni a un qubit e le interazioni a due qubit tra tutte le coppie di qubit, possiamo impostare:
feature_map = PauliFeatureMap(..., paulis=["Z", "YY"], entanglement="full")che produrrà blocchi della forma
┌───┐┌─────────────┐┌──────────┐ ┌───────────┐
┤ H ├┤ P(2.0*x[0]) ├┤ RX(pi/2) ├──■──────────────────────────────────────■──┤ RX(-pi/2) ├
├───┤├─────────────┤├──────────┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐├───────────┤
┤ H ├┤ P(2.0*x[1]) ├┤ RX(pi/2) ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├┤ RX(-pi/2) ├
└───┘└─────────────┘└──────────┘└───┘└────────────────────────────────┘└───┘└───────────┘Il circuito contiene reps ripetizioni di questa trasformazione.
Si rimanda a ZFeatureMap per il caso delle rotazioni Pauli- a un solo qubit e a ZZFeatureMap per il caso delle rotazioni Pauli- a uno e due qubit.
Esempi
>>> prep = PauliFeatureMap(2, reps=1, paulis=['ZZ'])
>>> print(prep.decompose())
┌───┐
q_0: ┤ H ├──■──────────────────────────────────────■──
├───┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐
q_1: ┤ H ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├
└───┘└───┘└────────────────────────────────┘└───┘>>> prep = PauliFeatureMap(2, reps=1, paulis=['Z', 'XX'])
>>> print(prep.decompose())
┌───┐┌─────────────┐┌───┐ ┌───┐
q_0: ┤ H ├┤ P(2.0*x[0]) ├┤ H ├──■──────────────────────────────────────■──┤ H ├
├───┤├─────────────┤├───┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐├───┤
q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ H ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├┤ H ├
└───┘└─────────────┘└───┘└───┘└────────────────────────────────┘└───┘└───┘>>> prep = PauliFeatureMap(2, reps=1, paulis=['ZY'])
>>> print(prep.decompose())
┌───┐┌──────────┐ ┌───────────┐
q_0: ┤ H ├┤ RX(pi/2) ├──■──────────────────────────────────────■──┤ RX(-pi/2) ├
├───┤└──────────┘┌─┴─┐┌────────────────────────────────┐┌─┴─┐└───────────┘
q_1: ┤ H ├────────────┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├─────────────
└───┘ └───┘└────────────────────────────────┘└───┘>>> from qiskit.circuit.library import EfficientSU2
>>> prep = PauliFeatureMap(3, reps=3, paulis=['Z', 'YY', 'ZXZ'])
>>> wavefunction = EfficientSU2(3)
>>> classifier = prep.compose(wavefunction)
>>> classifier.num_parameters
27
>>> classifier.count_ops()
OrderedDict([('cx', 39), ('rx', 36), ('u1', 21), ('h', 15), ('ry', 12), ('rz', 12)])Riferimenti:
[1] Havlicek et al. Apprendimento supervisionato con spazi di caratteristiche migliorati dal punto di vista quantistico, Nature 567, 209-212 (2019).
La classe qiskit.circuit.library.data_preparation.pauli_feature_map.PauliFeatureMap è deprecata a partire da Qiskit 2.1. Verrà rimosso in Qiskit 3.0. Utilizzare la funzione pauli_feature_map in sostituzione. Si noti che questo non restituirà più un BlueprintCircuit, ma solo un semplice QuantumCircuit.
Parametri
- feature_dimension (int | None) – Numero di qubit nel circuito.
- reps (int) – Il numero di volte in cui vengono ripetuti i livelli di evoluzione.
- entanglement (str |dict[int, list[tuple[int]]] | Callable[[int], str |dict[int, list[tuple[int]]]]) – Specifica la struttura di entanglement. Può essere una stringa (
'full','linear','reverse_linear','circular'o'sca') oppure un dizionario in cui le chiavi rappresentano il numero di qubit e i valori sono un elenco di coppie di numeri interi che specificano gli indici dei qubit intrecciati tra loro, ad esempio:{1: [(0,), (2,)], 2: [(0,1), (2,0)]}oppure può essere unCallable[[int], Union[str | Dict[...]]]per restituire un intreccio specifico per una ripetizione - alpha (float) – Il fattore di rotazione di Pauli, moltiplicativo delle rotazioni di Pauli
- paulis (list[str] | None) – Un elenco di stringhe da utilizzare per i pauli. Se non viene specificato alcun valore,
['Z', 'ZZ']verrà utilizzato. - data_map_func (Callable[[np.ndarray], float] | None) – Una funzione di mappatura per i dati
xche può essere specificata per sovrascrivere la mappatura predefinita. - parameter_prefix (str) – Il prefisso utilizzato se vengono generati parametri predefiniti.
- insert_barriers (bool) – In tal caso
True, vengono inserite delle barriere tra le istruzioni di evoluzione e gli strati di Hadamard. - name (str) – Nome del circuito.
Attributi
alpha
Il fattore di rotazione Pauli (alfa).
Risultati
Il fattore di rotazione di Pauli.
entanglement_blocks
I blocchi negli strati di entanglement.
Risultati
I blocchi negli strati di entanglement.
feature_dimension
Restituisce la dimensione della caratteristica (che è uguale al numero di qubit).
Risultati
La dimensione della caratteristica di questa mappa di caratteristiche.
num_parameters_settable
Il numero di parametri distinti.
paulis
Le stringhe di Pauli utilizzate per l'entanglement dei qubit.
Risultati
Le stringhe di Pauli come elenco.
name
Tipo: str
Un nome leggibile per il circuito.
Esempio
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuitMetodi
get_entangler_map
get_entangler_map(rep_num, block_num, num_block_qubits)
Ottenere la mappa entangler per la ripetizione rep_num e il blocco block_num.
La mappa entangler per il blocco corrente viene ricavata dal valore di self.entanglement. Di seguito sono elencati i diversi casi, dove i e j indicano rispettivamente il numero di ripetizioni e il numero di blocchi, e n il numero di qubit nel blocco.
tipo di entanglement | mappa del groviglio |
|---|---|
None | [[0, ..., n - 1]] |
str (ad es. 'full') | la connettività specificata sui n qubit |
List[int] | [entanglement] |
List[List[int]] | entanglement |
List[List[List[int]]] | entanglement[i] |
List[List[List[List[int]]]] | entanglement[i][j] |
List[str] | la connettività specificata in entanglement[i] |
List[List[str]] | la connettività specificata in entanglement[i][j] |
Callable[int, str] | Come List[str] |
Callable[int, List[List[int]]] | Come List[List[List[int]]] |
Si noti che tutti gli indici devono essere presi modulo per modulo della lunghezza dell'array su cui agiscono, quindi non verrà sollevato alcun errore di indice fuori limite, ma si ripeterà l'iter dall'inizio dell'elenco.
Parametri
- rep_num (int) – L'attuale ripetizione in cui ci troviamo.
- block_num (int) – Il numero di blocco all'interno degli strati di entanglement.
- num_block_qubits (int) – Il numero di qubit nel blocco.
Risultati
La mappa entangler per il blocco corrente nella ripetizione corrente.
Aumenti
ValueError - Se il valore di entanglement non può essere lanciato in una mappa entangler corrispondente.
Tipo di restituzione
pauli_block
pauli_block(pauli_string)
Ottenere il blocco Pauli per il circuito della mappa delle caratteristiche.