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')
Le circuit d'expansion de Pauli.
Le circuit d'expansion de Pauli est un circuit d'encodage de données qui transforme les données d'entrée , où est le feature_dimension, comme suit
Ici, est un ensemble d'indices de qubits qui décrit les connexions dans la carte de caractéristiques, est un ensemble contenant tous ces ensembles d'indices, et . Par défaut, la cartographie des données est
Les connexions possibles peuvent être définies à l'aide des arguments entanglement et paulis . Par exemple, pour les rotations du qubit unique et les interactions du qubit double entre toutes les paires de qubits, nous pouvons définir :
circuit = pauli_feature_map(..., 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 à z_feature_map() pour le cas des rotations de Pauli- à qubit unique et à zz_feature_map() pour les rotations de Pauli- à un ou deux qubits.
Paramètres
- feature_dimension (int) – Nombre de qubits dans le circuit.
- reps (int) – Le nombre de fois où les couches d'évolution sont répétées.
- entanglement (str |Mapping[int, Sequence[Sequence[int]]] | Callable[[int], str |Mapping[int, Sequence[Sequence[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 dont les valeurs sont des listes 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 unCallable[[int], Union[str | Dict[...]]]pour renvoyer un enchevêtrement spécifique à une répétition. - alpha (float) – Le facteur de rotation de Pauli, qui se multiplie par les 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[[Parameter], ParameterExpression] | None) – Une fonction de mappage pour les données
xqui peut être fournie afin de remplacer le mappage par défaut. - parameter_prefix (str) – Préfixe utilisé lorsque 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) – Le nom du circuit.
Retours
Un circuit quantique mettant en œuvre la carte de caractéristiques de Pauli.
Type de retour
Exemples
>>> 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)])Références :
[1] Havlicek et al. Supervised learning with quantum enhanced feature spaces, Nature 567, 209-212 (2019).