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

El circuito de expansión de Pauli.

El circuito de expansión de Pauli es un circuito de codificación de datos que transforma los datos de entrada xRn\vec{x} \in \mathbb{R}^n, donde n es el feature_dimension, como

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

Aquí, SS es un conjunto de índices qubit que describe las conexiones en el mapa de características, I\mathcal{I} es un conjunto que contiene todos estos conjuntos de índices, y Pi{I,X,Y,Z}P_i \in \{I, X, Y, Z\}. Por defecto, el mapa de datos ϕS\phi_S es

ϕ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}.

Las conexiones posibles pueden establecerse utilizando los argumentos entanglement y paulis . Por ejemplo, para rotaciones de un solo qubit ZZ e interacciones de dos qubits YYYY entre todos los pares de qubits, podemos establecer:

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

que producirá bloques de la 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) ├
└───┘└─────────────┘└──────────┘└───┘└────────────────────────────────┘└───┘└───────────┘

El circuito contiene reps repeticiones de esta transformación.

Consulte ZFeatureMap para el caso de rotaciones Pauli- ZZ de un solo qubit y a ZZFeatureMap para las rotaciones Pauli- ZZ de uno y dos qubits.

Ejemplos

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

Referencias:

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

Obsoleto desde la versión 2.1

La clase qiskit.circuit.library.data_preparation.pauli_feature_map.PauliFeatureMap está obsoleta a partir de Qiskit 2.1. Se eliminará en Qiskit 3.0. Utilice la función pauli_feature_map en su lugar. Tenga en cuenta que esto ya no devolverá un BlueprintCircuit, sino un simple QuantumCircuit.

Parámetros

  • feature_dimension (int | None) – Número de qubits en el circuito.
  • reps (int) – El número de veces que se repiten las capas de evolución.
  • entanglement (str |dict[int, list[tuple[int]]] | Callable[[int], str |dict[int, list[tuple[int]]]]) – Especifica la estructura de entrelazamiento. Puede ser una cadena ('full', 'linear', 'reverse_linear', 'circular' o 'sca') o un diccionario en el que las claves representan el número de qubits y los valores son listas de pares de números enteros que especifican los índices de los qubits que están entrelazados entre sí, por ejemplo: {1: [(0,), (2,)], 2: [(0,1), (2,0)]} o puede ser un Callable[[int], Union[str | Dict[...]]] para devolver un entrelazamiento específico para una repetición
  • alpha (float) – El factor de rotación Pauli, multiplicativo de las rotaciones pauli
  • paulis (list[str] | None) – Una lista de cadenas para los paulis que se van a utilizar. Si no se proporciona ninguno, ['Z', 'ZZ'] se utilizará.
  • data_map_func (Callable[[np.ndarray], float] | None) – Una función de asignación para los datos x que se puede proporcionar para anular la asignación predeterminada.
  • parameter_prefix (str) – El prefijo utilizado si se generan parámetros por defecto.
  • insert_barriers (bool) – En ese caso True, se insertan barreras entre las instrucciones de evolución y las capas de Hadamard.
  • name (str) – Nombre del circuito.

Atributos

alpha

El factor de rotación de Pauli (alfa).

Devuelve

El factor de rotación de Pauli.

entanglement_blocks

Los bloques en las capas de enredo.

Devuelve

Los bloques en las capas de enredo.

feature_dimension

Devuelve la dimensión de la característica (que es igual al número de qubits).

Devuelve

La dimensión de la característica de este mapa de características.

num_parameters_settable

El número de parámetros distintos.

paulis

Las cuerdas de Pauli utilizadas en el entrelazamiento de los qubits.

Devuelve

Las cuerdas de Pauli como lista.

name

Tipo: str

Un nombre legible para el circuito.

Ejemplo

from qiskit import QuantumCircuit

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

Métodos

get_entangler_map

get_entangler_map(rep_num, block_num, num_block_qubits)

GitHub

Obtenga el mapa de enredos para en la repetición rep_num y el bloque block_num.

El mapa de enredos del bloque actual se obtiene a partir del valor de self.entanglement. A continuación se enumeran los distintos casos, donde i y j denotan el número de repetición y el número de bloque, respectivamente, y n el número de qubits del bloque.

tipo de enredo
mapa de enredos
None[[0, ..., n - 1]]
str (p. ej 'full'.)la conectividad especificada en n los 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 conectividad especificada en entanglement[i]
List[List[str]]la conectividad especificada en entanglement[i][j]
Callable[int, str]Igual que List[str]
Callable[int, List[List[int]]]Igual que List[List[List[int]]]

Tenga en cuenta que todos los índices deben tomarse modulando la longitud de la matriz sobre la que actúan, es decir, no se producirá ningún error de índice fuera de los límites, sino que se reitera desde el principio de la lista.

Parámetros

  • rep_num (int) – La repetición actual en la que nos encontramos.
  • block_num (int) – El número de bloque dentro de las capas de enredo.
  • num_block_qubits (int) – El número de qubits del bloque.

Devuelve

El mapa de enredos para el bloque actual en la repetición actual.

Eleva

ValueError - Si el valor de entanglement no se ha podido asignar a un mapa de enredos correspondiente.

Tipo de retorno

Secuencia[* Secuencia*[ int ]]

pauli_block

pauli_block(pauli_string)

GitHub

Obtener el bloque de Pauli para el circuito del mapa de características.

pauli_evolution

pauli_evolution(pauli_string, time)

GitHub

Obtiene el bloque de evolución para la cadena pauli dada.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.