qiskit.circuit.library.pauli_feature_map
qiskit.circuit.library.pauli_feature_map(feature_dimension, reps=2, entanglement='full', alpha=2.0, paulis=None, data_map_func=None, parameter_prefix='x', insert_barriers=False, name='PauliFeatureMap')
Il circuito di espansione di Pauli.
Il circuito di espansione Pauli è un circuito di codifica dei dati che trasforma i dati di ingresso , dove è 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 solo qubit e le interazioni a due qubit tra tutte le coppie di qubit, possiamo impostare:
circuit = pauli_feature_map(..., 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 z_feature_map() per il caso delle rotazioni Pauli- a un solo qubit e a zz_feature_map() per il caso delle rotazioni Pauli- a uno e due qubit.
Parametri
- feature_dimension (int) – Numero di qubit nel circuito.
- reps (int) – Il numero di volte in cui vengono ripetuti i livelli di evoluzione.
- entanglement (str |Mapping[int, Sequence[Sequence[int]]] | Callable[[int], str |Mapping[int, Sequence[Sequence[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 elenchi 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 rispetto alle 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[[Parameter], ParameterExpression] | None) – Una funzione di mappatura per i dati
xche può essere specificata per sovrascrivere la mappatura predefinita. - parameter_prefix (str) – Il prefisso utilizzato quando vengono generati i 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) – Il nome del circuito.
Risultati
Un circuito quantistico che implementa la mappa di Pauli.
Tipo di restituzione
Esempi
>>> prep = pauli_feature_map(2, reps=1, paulis=["ZZ"])
>>> print(prep)
┌───┐
q_0: ┤ H ├──■──────────────────────────────────────■──
├───┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐
q_1: ┤ H ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├
└───┘└───┘└────────────────────────────────┘└───┘>>> prep = pauli_feature_map(2, reps=1, paulis=["Z", "XX"])
>>> print(prep)
┌───┐┌─────────────┐┌───┐ ┌───┐
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 = pauli_feature_map(2, reps=1, paulis=["ZY"])
>>> print(prep)
┌───┐┌──────────┐ ┌───────────┐
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 efficient_su2
>>> prep = pauli_feature_map(3, reps=3, paulis=["Z", "YY", "ZXZ"])
>>> wavefunction = efficient_su2(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).