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')
Basen: NLocal
Der Kreislauf der Pauli-Erweiterung.
Die Pauli-Expansionsschaltung ist eine Datenverschlüsselungsschaltung, die die Eingangsdaten , wobei n die feature_dimension ist, wie folgt umwandelt
Dabei ist ein Satz von Qubit-Indizes, der die Verbindungen in der Feature-Map beschreibt, ist ein Satz, der alle diese Indexsätze enthält, und . Standardmäßig ist das Daten-Mapping
Die möglichen Verbindungen können mit den Argumenten entanglement und paulis festgelegt werden. Zum Beispiel können wir für Ein-Qubit-Rotationen und Zwei-Qubit-Wechselwirkungen 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- Rotationen und auf ZZFeatureMap für die Ein- und Zwei-Qubit-Pauli- 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).
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 seinCallable[[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,
xdie ü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
Truediesem 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_circuitMethoden
get_entangler_map
get_entangler_map(rep_num, block_num, num_block_qubits)
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
pauli_block
pauli_evolution
pauli_evolution(pauli_string, time)
Ermittelt den Evolutionsblock für die angegebene Zeichenkette pauli.