About cookies on this site Our websites require some cookies to function properly (required). In addition, other cookies may be used with your consent to analyze site usage, improve the user experience and for advertising. For more information, please review your options. By visiting our website, you agree to our processing of information as described in IBM’sprivacy statement. To provide a smooth navigation, your cookie preferences will be shared across the IBM web domains listed here.
pauli_feature_map
class 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')
Bases:
The Pauli expansion circuit.
The Pauli expansion circuit is a data encoding circuit that transforms input data , where is the feature_dimension
, as
Here, is a set of qubit indices that describes the connections in the feature map, is a set containing all these index sets, and . Per default the data-mapping is
The possible connections can be set using the entanglement
and paulis
arguments. For example, for single-qubit rotations and two-qubit interactions between all qubit pairs, we can set:
circuit = pauli_feature_map(..., paulis=["Z", "YY"], entanglement="full")
which will produce blocks of the form
┌───┐┌─────────────┐┌──────────┐ ┌───────────┐
┤ 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) ├
└───┘└─────────────┘└──────────┘└───┘└────────────────────────────────┘└───┘└───────────┘
The circuit contains reps
repetitions of this transformation.
Please refer to z_feature_map()
for the case of single-qubit Pauli- rotations and to zz_feature_map()
for the single- and two-qubit Pauli- rotations.
Examples
>>> 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 EfficientSU2
>>> prep = pauli_feature_map(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)])
References:
[1] Havlicek et al. Supervised learning with quantum enhanced feature spaces, Nature 567, 209-212 (2019).
Parameters
- feature_dimension (int) –
- reps (int) –
- entanglement (str | Mapping[int, Sequence[Sequence[int]]] | Callable[[int], str | Mapping[int, Sequence[Sequence[int]]]]) –
- alpha (float) –
- paulis (list[str] | None) –
- data_map_func (Callable[[Parameter], ParameterExpression] | None) –
- parameter_prefix (str) –
- insert_barriers (bool) –
- name (str) –
Return type
Was this page helpful?
Report a bug or request content on GitHub.