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')
El circuito de expansión de Pauli.
El circuito de expansión Pauli es un circuito de codificación de datos que transforma los datos de entrada , donde es el feature_dimension, como
Aquí, es un conjunto de índices qubit que describe las conexiones en el mapa de características, es un conjunto que contiene todos estos conjuntos de índices, y . Por defecto, el mapa de datos es
Las conexiones posibles pueden establecerse utilizando los argumentos entanglement y paulis . Por ejemplo, para rotaciones de un solo qubit e interacciones de dos qubits entre todos los pares de qubits, podemos establecer:
circuit = pauli_feature_map(..., 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 z_feature_map() para el caso de rotaciones Pauli- de un solo qubit y a zz_feature_map() para las rotaciones Pauli- de uno y dos qubits.
Parámetros
- feature_dimension (int) – Número de qubits en el circuito.
- reps (int) – El número de veces que se repiten las capas de evolución.
- entanglement (str |Mapping[int, Sequence[Sequence[int]]] | Callable[[int], str |Mapping[int, Sequence[Sequence[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 una lista 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 unCallable[[int], Union[str | Dict[...]]]para devolver un entrelazamiento específico para una repetición. - alpha (float) – El factor de rotación de Pauli, que se multiplica por las rotaciones de 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[[Parameter], ParameterExpression] | None) – Una función de asignación para los datos
xque se puede proporcionar para anular la asignación predeterminada. - parameter_prefix (str) – El prefijo que se utiliza cuando 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) – El nombre del circuito.
Devuelve
Un circuito cuántico que implementa el mapa de características de Pauli.
Tipo de retorno
Ejemplos
>>> 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)])Referencias:
[1] Havlicek et al. Supervised learning with quantum enhanced feature spaces, Nature 567, 209-212 (2019).