Keine der Alternativen sind native
oder reshape speichern, Transponierten usw.
Zum Beispiel intern column_stack
konvertiert ihre Eingänge 2d ‚Spalte‘ Arrays. Effektiv ist es zu tun
In [1171]: np.concatenate((np.array(u.real,ndmin=2).T,np.array(u.imag,ndmin=2).T),axis=1)
Out[1171]:
array([[ 1., 2.],
[ 2., 4.],
[ 3., 6.],
[ 4., 8.]])
vstack
gibt seine Eingänge durch atleast_2d(m)
, sicherstellen, dass jeweils ein 1 Zeile 2D-Array. np.dstack
verwendet atleast_3d(m)
.
eine neue Funktion np.stack
In [1174]: np.stack((u.real,u.imag),-1)
Out[1174]:
array([[ 1., 2.],
[ 2., 4.],
[ 3., 6.],
[ 4., 8.]])
Es verwendet None
Indexierungs Abmessungen für Verkettung zu korrigieren; effektiv:
np.concatenate((u.real[:,None],u.imag[:,None]),axis=1)
Alle np.concatenate
am Ende mit; es und np.array
sind die einzigen kompilierten Verbindungsfunktionen.
Ein weiterer Trick ist view
In [1179]: u.view('(2,)float')
Out[1179]:
array([[ 1., 2.],
[ 2., 4.],
[ 3., 6.],
[ 4., 8.]])
Die komplexen Werte gespeichert als 2 benachbarte Schwimmer sind zu verwenden. Derselbe Datenpuffer kann also als reiner Float oder mit dieser Ansicht als 2d-Array von Floats betrachtet werden. Im Gegensatz zu den concatenate
Funktionen gibt es hier kein Kopieren.
Ein weiterer Test der Alternativen ist zu fragen, was passiert, wenn u
2d oder höher ist?
Ich habe das gerade überprüft :) es vermeidet die hässliche Indizierung! –