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')
O circuito de expansão de Pauli.
O circuito de expansão Pauli é um circuito de codificação de dados que transforma os dados de entrada , em que é o feature_dimension, como
Aqui, é um conjunto de índices de qubit que descreve as conexões no mapa de recursos, é um conjunto que contém todos esses conjuntos de índices e . Por padrão, o mapeamento de dados é
As conexões possíveis podem ser definidas usando os argumentos entanglement e paulis . Por exemplo, para rotações de um único qubit e interações de dois qubits entre todos os pares de qubits, podemos definir:
circuit = pauli_feature_map(..., paulis=["Z", "YY"], entanglement="full")que produzirá blocos do tipo
┌───┐┌─────────────┐┌──────────┐ ┌───────────┐
┤ 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) ├
└───┘└─────────────┘└──────────┘└───┘└────────────────────────────────┘└───┘└───────────┘O circuito contém reps repetições dessa transformação.
Consulte z_feature_map() para o caso das rotações de Pauli- de um único qubit e para zz_feature_map() para as rotações de Pauli- de um e dois qubits.
Parâmetros
- feature_dimension (int) – Número de qubits no circuito.
- reps (int) – O número de vezes que as camadas de evolução são repetidas.
- entanglement (str |Mapping[int, Sequence[Sequence[int]]] | Callable[[int], str |Mapping[int, Sequence[Sequence[int]]]]) – Especifica a estrutura de entrelaçamento. Pode ser uma string (
'full','linear','reverse_linear','circular'ou'sca') ou um dicionário em que as chaves representam o número de qubits e os valores são listas de pares de inteiros que especificam os índices dos qubits entrelaçados entre si, por exemplo:{1: [(0,), (2,)], 2: [(0,1), (2,0)]}ou pode ser umCallable[[int], Union[str | Dict[...]]]para retornar um entrelaçamento específico para uma repetição. - alpha (float) – O fator de rotação de Pauli, que multiplica as rotações de Pauli.
- paulis (list[str] | None) – Uma lista de strings para os paulis a serem utilizados. Se nenhum for fornecido,
['Z', 'ZZ']será usado. - data_map_func (Callable[[Parameter], ParameterExpression] | None) – Uma função de mapeamento para os dados
xque pode ser fornecida para substituir o mapeamento padrão. - parameter_prefix (str) – O prefixo utilizado caso sejam gerados parâmetros padrão.
- insert_barriers (bool) – Nesse caso
True, são inseridas barreiras entre as instruções de evolução e as camadas de Hadamard. - name (str) – O nome do circuito.
Retorna
Um circuito quântico que implementa o mapa de características de Pauli.
Tipo de retorno
Exemplos
>>> 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)])Referências
[1] Havlicek et al. Aprendizagem supervisionada com espaços de recursos aprimorados por quantum, Nature 567, 209-212 (2019).