Bediener
class qiskit.quantum_info.Operator(data, input_dims=None, output_dims=None)
Basen: LinearOp
Matrix-Operator-Klasse
Dies stellt einen Matrixoperator dar, der evolve() a Statevector durch Matrix-Vektor-Multiplikation
und wird evolve() a DensityMatrix durch Links- und Rechtsmultiplikation
Der folgende Operator , der auf den Null-Zustand angewandt wird, verwandelt ihn beispielsweise in den Ein-Zustand :
>>> import numpy as np
>>> from qiskit.quantum_info import Operator
>>> op = Operator(np.array([[0.0, 1.0], [1.0, 0.0]])) # Represents Pauli X operator>>> from qiskit.quantum_info import Statevector
>>> sv = Statevector(np.array([1.0, 0.0]))
>>> sv.evolve(op)
Statevector([0.+0.j, 1.+0.j],
dims=(2,))>>> from qiskit.quantum_info import DensityMatrix
>>> dm = DensityMatrix(np.array([[1.0, 0.0], [0.0, 0.0]]))
>>> dm.evolve(op)
DensityMatrix([[0.+0.j, 0.+0.j],
[0.+0.j, 1.+0.j]],
dims=(2,))Initialisieren Sie ein Operator-Objekt.
Parameter
- data (QuantumCircuit |Operation | BaseOperator | np.ndarray) – Daten zur Initialisierung des Operators.
- input_dims (tuple | None) – die Abmessungen des Eingabesubsystems.
- output_dims (tuple | None) – die Abmessungen des Ausgabesubsystems.
Erhöht
QiskitError – wenn Eingabedaten nicht als Operator initialisiert werden können.
Weitere Informationen:
Wenn die Eingabe- oder Ausgabeabmessungen Keine sind, werden sie automatisch aus den Eingabedaten ermittelt. Wenn die Eingabedaten ein Numpy-Array der Form ( 2**N, 2**N ) sind, werden Qubit-Systeme verwendet. Handelt es sich bei dem Eingabeoperator nicht um einen N-Qubit-Operator, so wird ein einzelnes Teilsystem zugewiesen, dessen Dimension durch die Form der Eingabe bestimmt wird. Man beachte, dass zwei mit dieser Methode initialisierte Operatoren nur dann als äquivalent gelten, wenn sie mit ihrer kanonischen Qubit-Reihenfolge (oder: Permutation) übereinstimmen. Siehe Operator.from_circuit() um eine andere Qubit-Permutation anzugeben.
Attribute
atol
Standardwert: 1e-08
data
Das zugrunde liegende Numpy-Array.
dim
Rückgabe Tupel (input_shape, output_shape).
num_qubits
Gibt die Anzahl der Qubits zurück, wenn es sich um einen N-Qubit-Operator handelt, andernfalls None.
qargs
Gibt die qargs für den Operator zurück.
rtol
Standardwert: 1e-05
settings
Bedienereinstellungen zurückgeben.
Methoden
adjoint
apply_permutation
apply_permutation(perm, front=False)
Ändert die Daten des Operators, indem er sie mit einer Permutation zusammensetzt.
Parameter
- perm (list) – permutationsmuster, das beschreibt, welche Qubits nach Anwendung der Permutation die Positionen 0, 1, 2 usw. einnehmen.
- front (bool) – Bei
Truewird die Permutation vor dem Operator angewendet, beiFalsenach dem Operator.
Rückgabe
Der geänderte Operator.
Rückgabetyp
Erhöht
QiskitError – wenn die Größe des Permutationsmusters nicht mit den Dimensionen des Operators übereinstimmt.
compose
compose(other, qargs=None, front=False)
Gibt die Operator-Komposition mit einem anderen Operator zurück.
Parameter
- other (Operator) – ein Operator-Objekt.
- qargs (list or None) – eine Liste von Subsystempositionen, auf die andere angewendet werden sollen. Wenn „None“ auf alle Teilsysteme angewendet wird (Standard: None).
- front (bool) – Wenn True, wird mit der Multiplikation des Rechtsoperators anstelle der Linksmultiplikation komponiert, [Standard: False].
Rückgabe
Der komponierte Operator.
Rückgabetyp
Erhöht
QiskitError – wenn andere nicht in einen Operator umgewandelt werden können oder für die angegebenen Teilsysteme nicht kompatible Dimensionen aufweisen.
Die Komposition (&) ist standardmäßig als linke Matrixmultiplikation für Matrixoperatoren definiert, während @ (entspricht dot()) als rechte Matrixmultiplikation definiert ist. Das heißt, dass A & B == A.compose(B) gleichwertig mit B @ A == B.dot(A) ist, wenn A und B vom gleichen Typ sind.
Die Einstellung front=True kwarg ändert dies in eine rechte Matrixmultiplikation und ist äquivalent zu der dot() methode A.dot(B) == A.compose(B, front=True).
conjugate
copy
dot
dot(other, qargs=None)
Rückgabe des rechtsmultiplizierten Operators self * other.
Parameter
- other (Operator) – ein Operator-Objekt.
- qargs (list or None) – eine Liste von Subsystempositionen, auf die andere angewendet werden sollen. Wenn „None“ auf alle Teilsysteme angewendet wird (Standard: None).
Rückgabe
Die rechte Matrix multipliziert Operator.
Rückgabetyp
Das Punktprodukt kann mit dem binären Operator @ ermittelt werden. Daher ist a.dot(b) gleichbedeutend mit a @ b.
draw
draw(output=None, **drawer_args)
Gibt eine Visualisierung des Operators zurück.
repr : String of the state's __repr__.
text : ASCII TextMatrix, der in der Konsole ausgedruckt werden kann.
latex : Ein IPython-Latex-Objekt für die Anzeige in Jupyter-Notebooks.
latex_quelle : Roher, nicht kompilierter ASCII-Quelltext zur Erzeugung eines Arrays mit LaTeX.
Parameter
- output (str) – Wählen Sie die Ausgabemethode, mit der der Zustand gezeichnet werden soll. Gültige Auswahlmöglichkeiten sind repr, text, latex, latex_source, Standard ist repr.
- drawer_args - Argumente, die direkt an die entsprechende Zeichenfunktion oder den Konstruktor ( TextMatrix( ), array_to_latex()) übergeben werden. Siehe die entsprechende Funktion unter qiskit.visualization für die Dokumentation dieser Funktion.
Rückgabe
Zeichnung des Betreibers.
Rückgabetyp
str oder TextMatrix oder IPython.display.Latex
Erhöht
- ValueError - wenn eine ungültige Ausgabemethode gewählt wird.
- MissingOptionalLibrary - Wenn SymPy nicht installiert ist und
'latex'oder'latex_source'füroutputausgewählt wird.
equiv
equiv(other, rtol=None, atol=None)
Gibt True zurück, wenn die Operatoren bis zur globalen Phase gleichwertig sind.
Parameter
- other (Operator) – ein Operator-Objekt.
- rtol (float) – relativer Toleranzwert zum Vergleich.
- atol (float) – absoluter Toleranzwert zum Vergleich.
Rückgabe
Wahr, wenn die Operatoren bis zur globalen Phase gleichwertig sind.
Rückgabetyp
expand
expand(other)
Gibt das Tensorprodukt umgekehrter Ordnung mit einem anderen Operator zurück.
Parameter
other (Operator) – ein Operator-Objekt.
Rückgabe
das Tensorprodukt , wobei
ist der aktuelle Operator, und ist der andere Operator.
Rückgabetyp
from_circuit
classmethod from_circuit(circuit, ignore_set_layout=False, layout=None, final_layout=None)
Erstelle ein neues Operator-Objekt aus einem QuantumCircuit
OperatorZwar kann ein QuantumCircuit Objekt direkt als Argument data an den Klassenkonstruktor übergeben werden, doch bietet dies keine Möglichkeiten, die Schaltung zur Erstellung eines Objekts zu nutzen. Mit dieser Konstruktormethode können Sie steuern, wie das Operator erstellt wird, sodass es an einen bestimmten Anwendungsfall angepasst werden kann.
Standardmäßig permutiert diese Konstruktormethode die Qubits auf der Grundlage eines konfigurierten Anfangslayouts (d.h. nachdem es transpiliert wurde). Es bietet auch die Möglichkeit, manuell ein Layout objekt direkt anzugeben.
Parameter
- circuit (QuantumCircuit) – Das
QuantumCircuit, aus dem ein Operator-Objekt erstellt werden soll. - ignore_set_layout (bool) – Bei
Truewird die Eingabecircuitignoriert, wenn ein Layout festgelegt wurde - layout (Layout) – Falls angegeben, kann dieser kwarg verwendet werden, um ein bestimmtes Layout für die Permutation der Qubits in der erstellten Datei festzulegen
Operator. Wenn dies angegeben wird, wird es anstelle eines in der Eingabecircuitenthaltenen Layouts verwendet. Falls angegeben, müssen die virtuellen Bits in derLayoutmüssen in der Eingabecircuitvorhanden sein. - final_layout (Layout) – Falls angegeben, kann dieser kwarg verwendet werden, um die durch Swap-Einfügungen während der Routing-Phase des Transpilers verursachte Ausgabe-Permutation darzustellen.
Rückgabe
Ein Operator, der die Eingangsschaltung darstellt
Rückgabetyp
from_label
classmethod from_label(label)
Rückgabe eines Tensorprodukts von Ein-Qubit-Operatoren.
Parameter
label (string) – ein-Qubit-Operator-String.
Rückgabe
Der N-Qubit-Operator.
Rückgabetyp
Erhöht
QiskitError – wenn die Bezeichnung ungültige Zeichen enthält oder die Länge der Bezeichnung größer ist als eine explizit angegebene Anzahl von num_qubits.
Weitere Informationen:
Die Beschriftungen entsprechen den Einzel-Qubit-Matrizen: 'I': [ [1, 0], [0, 1] ] 'X': [ [0, 1], [1, 0] ] 'Y': [ [0, -1j], [1j, 0] ] 'Z': [ [1, 0], [0, -1] ] 'H': [ [1, 1], [1, -1] ] / sqrt(2) 'S': [ [1, 0], [0, 1j] ] 'T': [ [1, 0], [0, ( 1+1j ) / sqrt(2)] ] '0': [ [1, 0], [0, 0] ] '1': [ [0, 0], [0, 1] ] '+': [ [0.5, 0.5], [0.5, 0.5] ] '-': [ [0.5, -0.5], [-0.5, 0.5] ] 'r': [ [0.5, -0.5j], [0.5j, 0.5] ] 'l': [ [0.5, 0.5j], [-0.5j, 0.5] ]
input_dims
input_dims(qargs=None)
Rückgabe eines Tupels der Eingabedimension für die angegebenen Teilsysteme.
is_unitary
output_dims
output_dims(qargs=None)
Rückgabe eines Tupels der Ausgabedimension für die angegebenen Teilsysteme.
power
power(n, branch_cut_rotation=3.141592653589793e-12, assume_unitary=False)
Gibt die Matrixpotenz des Operators zurück.
Nicht-ganzzahlige Potenzen von Operatoren mit einem Eigenwert, dessen komplexe Phase ist, haben einen Verzweigungsschnitt in der komplexen Ebene, was die Berechnung der Hauptwurzel um diesen Schnitt herum von der Genauigkeit / den Unterschieden in der BLAS-Implementierung abhängig macht. Zum Beispiel kann die Quadratwurzel von Pauli Y die oder Y-Drehung ergeben, je nachdem, ob der Eigenwert -1 als complex(-1, tiny) oder complex(-1, -tiny) gefunden wird. Da solche Eigenwerte in der Quanteninformation sehr häufig vorkommen, dreht diese Funktion zunächst die Eingabematrix in der Phase, um den Schnittpunkt der Verzweigung auf einen weit weniger häufigen Punkt zu verschieben. Die zugrundeliegenden numerischen Präzisionsprobleme rund um den Verzweigungsschnittpunkt bleiben bestehen, wenn ein Operator einen Eigenwert in der Nähe dieser Phase hat. Das Ausmaß dieser Drehung kann mit dem Parameter branch_cut_rotation gesteuert werden.
Die Wahl von branch_cut_rotation beeinflusst die gefundene Hauptwurzel. Zum Beispiel wird die Quadratwurzel von ZGate wird entweder berechnet als SGate oder SdgGate berechnet, je nachdem, in welche Richtung die Drehung ausgeführt wird:
from qiskit.circuit import library
from qiskit.quantum_info import Operator
z_op = Operator(library.ZGate())
assert z_op.power(0.5, branch_cut_rotation=1e-3) == Operator(library.SGate())
assert z_op.power(0.5, branch_cut_rotation=-1e-3) == Operator(library.SdgGate())Parameter
- n (float) – die Macht, die Matrix zu erhöhen.
- branch_cut_rotation (float) – Der Drehwinkel, der auf den Zweigschnitt in der komplexen Ebene angewendet werden soll. Dadurch wird der Schnitt des Zweigs vom gemeinsamen Punkt weg verlagert, kann aber dazu führen, dass eine andere Wurzel als Hauptwurzel gewählt wird. Die Drehung erfolgt gegen den Uhrzeigersinn, entsprechend der Standardkonvention für komplexe Phasen.
- assume_unitary (bool) – wenn
True, wird angenommen, dass der Operator unitär ist. In diesem Fall verwenden wir für gebrochene Potenzen eine schnellere Implementierung auf der Grundlage der Schur-Zerlegung.
Rückgabe
der resultierende Operator O ** n.
Rückgabetyp
Erhöht
QiskitError – wenn die Eingabe- und Ausgabedimensionen des Operators nicht gleich sind.
Es ist nur dann sicher, das Argument assume_unitary auf True zu setzen, wenn der Operator unitär (oder, allgemeiner, normal) ist. Andernfalls wird die Funktion eine falsche Ausgabe liefern.
reshape
reshape(input_dims=None, output_dims=None, num_qubits=None)
Rückgabe einer flachen Kopie mit umgestalteten Dimensionen des Eingangs- und Ausgangssubsystems.
Parameter
- input_dims (None or tuple) – neue Subsystem-Eingangsmaße. Wenn Keine, werden die ursprünglichen Eingangsdimms beibehalten [Standard: Keine].
- output_dims (None or tuple) – neue Dimensionen der Teilsystemleistung. Wenn Keine, werden die ursprünglichen Ausgangsdimms beibehalten [Standard: Keine].
- num_qubits (None or int) – in einen N-Qubit-Operator umwandeln [Standard: Keine].
Rückgabe
gibt self mit umgestalteten Eingabe- und Ausgabeabmessungen zurück.
Rückgabetyp
BaseOperator
Erhöht
QiskitError – wenn die Summe aller Eingangs- oder Ausgangsabmessungen der Teilsysteme nicht konstant ist.
reverse_qargs
reverse_qargs()
Gibt einen Operator mit umgekehrter Subsystemreihenfolge zurück.
Für einen Tensorproduktoperator ist dies gleichbedeutend mit der Umkehrung der Reihenfolge der Tensorproduktteilsysteme. Bei einem Operator lautet der zurückgegebene Operator .
Rückgabe
der Betreiber mit umgekehrter Reihenfolge der Teilsysteme.
Rückgabetyp
tensor
tensor(other)
Gibt das Tensorprodukt mit einem anderen Operator zurück.
Parameter
other (Operator) – ein Operator-Objekt.
Rückgabe
das Tensorprodukt , wobei
ist der aktuelle Operator, und ist der andere Operator.
Rückgabetyp
Das Tensorprodukt kann mit dem binären Operator ^ erhalten werden. Daher ist a.tensor(b) gleichbedeutend mit a ^ b.