Wenn Ihre Real- und Imaginärteile die Slices entlang der letzten Dimension sind und Ihr Array entlang der letzten Dimension zusammenhängend ist, können Sie dies einfach tun
A.view(dtype=np.complex128)
Wenn Sie Floats mit einfacher Genauigkeit verwenden, ist dies der Fall
A.view(dtype=np.complex64)
Hier ist ein ausführlicheres Beispiel
import numpy as np
from numpy.random import rand
A = rand(100, 2)
A_comp = A.view(dtype=np.complex128)
A = A.view(dtype=np.float64)
Wenn Sie die zusätzliche Dimension entfernen möchten, die vom Casting übrig bleibt, können Sie so etwas tun
A_comp = A.view(dtype=np.complex128)[...,0]
Dies funktioniert, weil eine komplexe Zahl im Speicher eigentlich nur zwei Gleitkommazahlen sind. Der erste repräsentiert den Realteil und der zweite repräsentiert den Imaginärteil. Die Ansichtsmethode des Arrays ändert den d-Typ des Arrays, um anzuzeigen, dass Sie zwei benachbarte Gleitkommawerte als eine einzige komplexe Zahl behandeln möchten, und aktualisiert die Dimension entsprechend.
Diese Methode kopiert keine Werte in das Array und führt keine neuen Berechnungen durch. Sie erstellt lediglich ein neues Array-Objekt, das denselben Speicherblock unterschiedlich anzeigt. Das macht es so, dass diese Operation viel ausgeführt werden kann schneller ausgeführt werden als alles, was das Kopieren von Werten beinhaltet. Dies bedeutet auch, dass alle Änderungen, die im Array mit komplexen Werten vorgenommen werden, im Array mit den Real- und Imaginärteilen wiedergegeben werden.
Es kann auch etwas schwieriger sein, das ursprüngliche Array wiederherzustellen, wenn Sie die zusätzliche Achse entfernen, die unmittelbar nach der Typumwandlung vorhanden ist. Dinge wie A_comp[...,np.newaxis].view(np.float64)
funktionieren derzeit nicht, da NumPy zum jetzigen Zeitpunkt nicht erkennt, dass das Array beim Hinzufügen der neuen Achse noch C-zusammenhängend ist. Siehe dieses Problem .
A_comp.view(np.float64).reshape(A.shape)
scheint jedoch in den meisten Fällen zu funktionieren.