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

Basen: NLocal

Der Kreislauf der Pauli-Erweiterung.

Die Pauli-Expansionsschaltung ist eine Datenverschlüsselungsschaltung, die die Eingangsdaten x⃗∈Rn\vec{x} \in \mathbb{R}^n, wobei n die feature_dimension ist, wie folgt umwandelt

UΦ(x⃗)=exp⁡(i∑S∈IϕS(x⃗)∏i∈SPi).U_{\Phi(\vec{x})}=\exp\left(i\sum_{S \in \mathcal{I}} \phi_S(\vec{x})\prod_{i\in S} P_i\right).

Dabei ist SS ein Satz von Qubit-Indizes, der die Verbindungen in der Feature-Map beschreibt, I\mathcal{I} ist ein Satz, der alle diese Indexsätze enthält, und Pi∈{I,X,Y,Z}P_i \in \{I, X, Y, Z\}. Standardmäßig ist das Daten-Mapping ϕS\phi_S

ϕS(x⃗)={xi if S={i}∏j∈S(π−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}.

Die möglichen Verbindungen können mit den Argumenten entanglement und paulis festgelegt werden. Zum Beispiel können wir für Ein-Qubit-Rotationen ZZ und Zwei-Qubit-Wechselwirkungen YYYY zwischen allen Qubit-Paaren festlegen:

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

die Blöcke der 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) ├
└───┘└─────────────┘└──────────┘└───┘└────────────────────────────────┘└───┘└───────────┘

Die Schaltung enthält reps Wiederholungen dieser Transformation.

Bitte beachten Sie ZFeatureMap für den Fall von Ein-Qubit-Pauli- ZZ Rotationen und auf ZZFeatureMap für die Ein- und Zwei-Qubit-Pauli- ZZ Rotationen.

Beispiele

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

Quellenangaben:

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

Veraltet seit Version 2.1

Die Klasse qiskit.circuit.library.data_preparation.pauli_feature_map.PauliFeatureMap ist ab Qiskit 2.1 veraltet. Sie wird in Qiskit 3.0 entfernt. Verwenden Sie als Ersatz die Funktion pauli_feature_map. Beachten Sie, dass dies nicht mehr BlueprintCircuit, zurückgibt, sondern nur noch QuantumCircuit.

Parameter

  • feature_dimension (int | None) – Anzahl der Qubits im Schaltkreis.
  • reps (int) – Die Anzahl der Wiederholungen der Evolutionsschichten.
  • entanglement (str |dict[int, list[tuple[int]]] | Callable[[int], str |dict[int, list[tuple[int]]]]) – Legt die Verschränkungsstruktur fest. Es kann sich um eine Zeichenkette ('full', 'linear', 'reverse_linear', 'circular' oder 'sca') handeln oder um ein Wörterbuch, bei dem die Schlüssel die Anzahl der Qubits darstellen und die Werte eine Liste von Ganzzahlpaaren sind, die die Indizes der miteinander verschränkten Qubits angeben, zum Beispiel: {1: [(0,), (2,)], 2: [(0,1), (2,0)]} oder es kann ein sein Callable[[int], Union[str | Dict[...]]] , um eine für eine Wiederholung spezifische Verschränkung zurückzugeben
  • alpha (float) – Der Pauli-Rotationsfaktor, multiplikativ zu den Pauli-Rotationen
  • paulis (list[str] | None) – Eine Liste von Zeichenfolgen für die zu verwendenden Paulis. Wenn keine angegeben werden, ['Z', 'ZZ'] wird verwendet.
  • data_map_func (Callable[[np.ndarray], float] | None) – Eine Zuordnungsfunktion für die Daten, x die übergeben werden kann, um die Standardzuordnung zu überschreiben.
  • parameter_prefix (str) – Das Präfix, das verwendet wird, wenn Standardparameter generiert werden.
  • insert_barriers (bool) – In True diesem Fall werden zwischen den Evolutionsanweisungen und den Hadamard-Schichten Barrieren eingefügt.
  • name (str) – Name der Rennstrecke.

Attribute

alpha

Der Pauli-Rotationsfaktor (alpha).

Rückgabe

Der Pauli-Rotationsfaktor.

entanglement_blocks

Die Blöcke in den Verflechtungsschichten.

Rückgabe

Die Blöcke in den Verflechtungsschichten.

feature_dimension

Gibt die Merkmalsdimension zurück (die gleich der Anzahl der Qubits ist).

Rückgabe

Die Merkmalsdimension dieser Merkmalskarte.

num_parameters_settable

Die Anzahl der verschiedenen Parameter.

paulis

Die Pauli-Strings, die für die Verschränkung der Qubits verwendet werden.

Rückgabe

Die Pauli-Strings als Liste.

name

Typ: str

Ein von Menschen lesbarer Name für den Stromkreis.

Beispiel

from qiskit import QuantumCircuit

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

Methoden

get_entangler_map

get_entangler_map(rep_num, block_num, num_block_qubits)

GitHub

Holen Sie sich die Entangler-Karte für in der Wiederholung rep_num und den Block block_num.

Die Entanglerkarte für den aktuellen Block wird aus dem Wert von self.entanglement abgeleitet. Nachfolgend sind die verschiedenen Fälle aufgeführt, wobei i und j die Wiederholungszahl bzw. die Blocknummer und n die Anzahl der Qubits im Block bezeichnen.

verschränkungsart
verwicklungskarte
None[[0, ..., n - 1]]
str (z. B. 'full')die angegebene Konnektivität auf n den Qubits
List[int][entanglement]
List[List[int]]entanglement
List[List[List[int]]]entanglement[i]
List[List[List[List[int]]]]entanglement[i][j]
List[str]die in entanglement[i]
List[List[str]]die in entanglement[i][j]
Callable[int, str]Entspricht List[str]
Callable[int, List[List[int]]]Entspricht List[List[List[int]]]

Beachten Sie, dass alle Indizes modulo der Länge des Arrays, auf das sie wirken, genommen werden müssen, d.h. es wird kein Out-of-Bounds-Index-Fehler ausgelöst, sondern wir wiederholen vom Anfang der Liste.

Parameter

  • rep_num (int) – Die aktuelle Wiederholung, in der wir uns befinden.
  • block_num (int) – Die Blocknummer innerhalb der Verschränkungsschichten.
  • num_block_qubits (int) – Die Anzahl der Qubits im Block.

Rückgabe

Die Entangler-Karte für den aktuellen Block in der aktuellen Wiederholung.

Erhöht

ValueError - Wenn der Wert von entanglement nicht auf eine entsprechende Entangler-Karte übertragen werden konnte.

Rückgabetyp

Sequence[* Sequence*[ int ]]

pauli_block

pauli_block(pauli_string)

GitHub

Holen Sie sich den Pauli-Block für den Feature Map Kreis.

pauli_evolution

pauli_evolution(pauli_string, time)

GitHub

Ermittelt den Evolutionsblock für die angegebene Zeichenkette pauli.

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.