Dimension eines Operators in qutip definieren
Meine Hauptfrage: Kann mir bitte jemand erklären, wie die Liste der Arrays verwendet wird, um die Dimension in Qutip zu definieren?
Kontext:
Wenn ich meinen Dichteoperator A = Qobj(np.arange(1,65).reshape(8,8))
von 3 Qubits habe, wie nehme ich die partielle Transponierung so, dass ich eine zweiteilige Verschränkung zwischen Qubit 1 mit Qubit 2 und 3 machen möchte?
Ich vermute, dass ich meine Maske als definieren müsste X.dims = [[2,4],[2,4]]
und qt.partial_transpose(X, [1,0])
welche unter teilweiser Transposition über das zweite Subsystem nehmen müsste. Aber was bedeutet das X.dims = [[2,4],[2,4]]
in qutip?
Wenn dies richtig ist, wie würde ich dann meine Dimension für die Verschränkung zwischen Qubit 1 und 3 und Qubit 2 definieren?
Antworten
Aus der offiziellen Dokumentation :
Q.dims
: Liste zur Verfolgung von Formen für einzelne Komponenten eines mehrteiligen Systems (für Tensorprodukte und Teilspuren).
Mit anderen Worten, Sie können es sich als die Dimensionen des (Matrixdarstellung) des betrachteten Objekts vorstellen, wobei die tensorielle Struktur des zugrunde liegenden Raums berücksichtigt wird. Das erste Element gibt Auskunft über die Anzahl der Zeilen, während das zweite Element über die Anzahl der Spalten Auskunft gibt.
Betrachten Sie als Beispiel
fooQ = qutip.tensor(qutip.basis(2, 0), qutip.basis(2, 1))
Dies ist das Tensorprodukt zweier Qubit-Ket-Zustände, also ein Vektor in einem Dimensionsraum$2\times 2$. Als Matrix können Sie es als a darstellen$4\times 1$Matrix. Aber wenn Sie sich an die Tensorstruktur dieses Raums erinnern wollen, was es einfacher macht, Dinge wie partielles Tracing durchzuführen, ist es besser, jede einzelne Dimension zu speichern. Sie landen dann bei fooQ.dims == [[2, 2], [1, 1]]
, denn es gibt sie$2\times 2$Reihen und$1=1\times 1$Säule.
Stellt in Ihrem Beispiel [[2, 4], [2, 4]]
eine Dichtematrix in einem Raum dar$\mathcal H_1\otimes\mathcal H_2$mit$\dim\mathcal H_1=2$und$\dim\mathcal H_2=4$.
Sie können die Gesamtabmessungen des Raums abrufen, indem Sie z
number_of_rows = np.prod(fooQ.dims[0])
number_of_cols = np.prod(fooQ.dims[1])
Oder man „enträtselt“ die Maße und erhält so eine Liste mit den Maßen der einzelnen Raumkomponenten
unravelled_dimensions = np.transpose(fooQ.dims)