Skip to main content
IBM Quantum Platform

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')

GitHub

Bases : NLocal

Le circuit de l'expansion de Pauli.

Le circuit d'expansion de Pauli est un circuit de codage de données qui transforme les données d'entrée xRn\vec{x} \in \mathbb{R}^n, où n est le feature_dimension, comme suit

UΦ(x)=exp(iSIϕS(x)iSPi).U_{\Phi(\vec{x})}=\exp\left(i\sum_{S \in \mathcal{I}} \phi_S(\vec{x})\prod_{i\in S} P_i\right).

Ici, SS est un ensemble d'indices de qubits qui décrit les connexions dans la carte de caractéristiques, I\mathcal{I} est un ensemble contenant tous ces ensembles d'indices, et Pi{I,X,Y,Z}P_i \in \{I, X, Y, Z\}. Par défaut, la cartographie des données ϕS\phi_S est

ϕS(x)={xi if S={i}jS(πxj) if S>1.\phi_S(\vec{x}) = \begin{cases} x_i \text{ if } S = \{i\} \\ \prod_{j \in S} (\pi - x_j) \text{ if } |S| > 1 \end{cases}.

Les connexions possibles peuvent être définies à l'aide des arguments entanglement et paulis . Par exemple, pour les rotations du qubit unique ZZ et les interactions du qubit double YYYY entre toutes les paires de qubits, nous pouvons définir :

feature_map = PauliFeatureMap(..., paulis=["Z", "YY"], entanglement="full")

qui produira des blocs de la forme

┌───┐┌─────────────┐┌──────────┐                                            ┌───────────┐
┤ 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) ├
└───┘└─────────────┘└──────────┘└───┘└────────────────────────────────┘└───┘└───────────┘

Le circuit contient reps répétitions de cette transformation.

Veuillez vous référer à ZFeatureMap pour le cas des rotations de Pauli- ZZ à qubit unique et à ZZFeatureMap pour les rotations de Pauli- ZZ à un ou deux qubits.

Exemples

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

Références :

[1] Havlicek et al. Supervised learning with quantum enhanced feature spaces, Nature 567, 209-212 (2019).

Déclassé depuis la version 2.1

La classe qiskit.circuit.library.data_preparation.pauli_feature_map.PauliFeatureMap est obsolète depuis Qiskit 2.1. Elle sera supprimée à Qiskit 3.0. Utilisez la fonction pauli_feature_map en remplacement. Notez que cela ne renverra plus un BlueprintCircuit, mais un simple QuantumCircuit.

Paramètres

  • feature_dimension (int | None) – Nombre de qubits dans le circuit.
  • reps (int) – Le nombre de fois où les couches d'évolution sont répétées.
  • entanglement (str |dict[int, list[tuple[int]]] | Callable[[int], str |dict[int, list[tuple[int]]]]) – Définit la structure d'intrication. Il peut s'agir d'une chaîne de caractères ('full', 'linear', 'reverse_linear', 'circular' ou 'sca') ou d'un dictionnaire dont les clés représentent le nombre de qubits et les valeurs une liste de paires d'entiers indiquant les indices des qubits intriqués les uns avec les autres, par exemple : {1: [(0,), (2,)], 2: [(0,1), (2,0)]} ou peut être un Callable[[int], Union[str | Dict[...]]] pour renvoyer un état d'intrication spécifique à une répétition
  • alpha (float) – Le facteur de rotation de Pauli, multiplicatif par rapport aux rotations de Pauli
  • paulis (list[str] | None) – Une liste de chaînes de caractères destinées aux paulis. Si aucune valeur n'est fournie, ['Z', 'ZZ'] sera utilisé.
  • data_map_func (Callable[[np.ndarray], float] | None) – Une fonction de mappage pour les données x qui peut être fournie afin de remplacer le mappage par défaut.
  • parameter_prefix (str) – Le préfixe utilisé si des paramètres par défaut sont générés.
  • insert_barriers (bool) – Dans ce cas True, des barrières sont insérées entre les instructions d'évolution et les couches de Hadamard.
  • name (str) – Nom du circuit.

Attributs

alpha

Le facteur de rotation de Pauli (alpha).

Retours

Le facteur de rotation de Pauli.

entanglement_blocks

Les blocs dans les couches d'enchevêtrement.

Retours

Les blocs dans les couches d'enchevêtrement.

feature_dimension

Renvoie la dimension de la caractéristique (qui est égale au nombre de qubits).

Retours

La dimension de l'élément de cette carte.

num_parameters_settable

Le nombre de paramètres distincts.

paulis

Les chaînes de Pauli utilisées dans l'enchevêtrement des qubits.

Retours

Les chaînes de Pauli sous forme de liste.

name

Type : str

Un nom lisible par l'homme pour le circuit.

Exemple

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit

Méthodes

get_entangler_map

get_entangler_map(rep_num, block_num, num_block_qubits)

GitHub

Obtenez la carte d'enchevêtrement pour dans la répétition rep_num et le bloc block_num.

La carte des enchevêtrements pour le bloc en cours est dérivée de la valeur de self.entanglement. Les différents cas sont énumérés ci-dessous, où i et j désignent respectivement le numéro de répétition et le numéro de bloc, et n le nombre de qubits dans le bloc.

type d'enchevêtrement
carte de l'enchevêtrement
None[[0, ..., n - 1]]
str (par exemple 'full')la connectivité spécifiée sur n les qubits
List[int][entanglement]
List[List[int]]entanglement
List[List[List[int]]]entanglement[i]
List[List[List[List[int]]]]entanglement[i][j]
List[str]la connectivité spécifiée dans entanglement[i]
List[List[str]]la connectivité spécifiée dans entanglement[i][j]
Callable[int, str]identique à List[str]
Callable[int, List[List[int]]]identique à List[List[List[int]]]

Notez que tous les indices doivent être pris modulo la longueur du tableau sur lequel ils agissent, c'est-à-dire qu'aucune erreur d'indice hors limites ne sera soulevée mais nous réitérons à partir du début de la liste.

Paramètres

  • rep_num (int) – La répétition actuelle dans laquelle nous nous trouvons.
  • block_num (int) – Le numéro de bloc dans les couches d'enchevêtrement.
  • num_block_qubits (int) – Le nombre de qubits dans le bloc.

Retours

La carte des enchevêtrements pour le bloc actuel dans la répétition actuelle.

Augmentations

ValueError - Si la valeur de entanglement n'a pas pu être attribuée à une carte d'enchevêtrement correspondante.

Type de retour

Séquence[* Séquence*[ int ]]

pauli_block

pauli_block(pauli_string)

GitHub

Obtenir le bloc de Pauli pour le circuit de la carte de caractéristiques.

pauli_evolution

pauli_evolution(pauli_string, time)

GitHub

Obtenir le bloc d'évolution pour la chaîne de caractères pauli donnée.

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.