Die Dokumentation für savetxt
über fmt
Optionen für eine komplexe Anordnung zu sprechen.
Beginnend mit einem 1D-Array:
In [17]: np.arange(5)+np.arange(5,0,-1)*1j
Out[17]: array([ 0.+5.j, 1.+4.j, 2.+3.j, 3.+2.j, 4.+1.j])
In [18]: arr = np.arange(5)+np.arange(5,0,-1)*1j
Der Standard die Zahlen zu schreiben ist, eine ()
Zeichenfolge pro Zeile. Das mit loadtxt
(oder genfromtxt
) zu lesen wird ein Problem sein. Es muss als String geladen und dann zeilenweise konvertiert werden.
Es heißt, ich kann ein Format für die realen und imaginären Teile angeben, in diesem Fall speichert es als 2 Spalten. Das ist einfach zu lesen mit loadtxt
.
In [21]: np.savetxt('test.txt',arr, fmt='%f %f')
In [22]: cat test.txt
0.000000 5.000000
1.000000 4.000000
2.000000 3.000000
3.000000 2.000000
4.000000 1.000000
In [23]: np.loadtxt('test.txt')
Out[23]:
array([[ 0., 5.],
[ 1., 4.],
[ 2., 3.],
[ 3., 2.],
[ 4., 1.]])
In [25]: np.loadtxt('test.txt').view(complex)
Out[25]:
array([[ 0.+5.j],
[ 1.+4.j],
[ 2.+3.j],
[ 3.+2.j],
[ 4.+1.j]])
mit einem 2D-Komplex Array Ich brauche fmt für alle Spalten angeben
In [28]: arr1=np.array((arr, arr*.1, arr+1))
In [29]: arr1
Out[29]:
array([[ 0.0+5.j , 1.0+4.j , 2.0+3.j , 3.0+2.j , 4.0+1.j ],
[ 0.0+0.5j, 0.1+0.4j, 0.2+0.3j, 0.3+0.2j, 0.4+0.1j],
[ 1.0+5.j , 2.0+4.j , 3.0+3.j , 4.0+2.j , 5.0+1.j ]])
In [33]: np.savetxt('test.txt',arr1, fmt=['%f %f']*5)
In [34]: cat test.txt
0.000000 5.000000 1.000000 4.000000 2.000000 3.000000 3.000000 2.000000 4.000000 1.000000
0.000000 0.500000 0.100000 0.400000 0.200000 0.300000 0.300000 0.200000 0.400000 0.100000
1.000000 5.000000 2.000000 4.000000 3.000000 3.000000 4.000000 2.000000 5.000000 1.000000
In [35]: np.loadtxt('test.txt').view(complex)
Out[35]:
array([[ 0.0+5.j , 1.0+4.j , 2.0+3.j , 3.0+2.j , 4.0+1.j ],
[ 0.0+0.5j, 0.1+0.4j, 0.2+0.3j, 0.3+0.2j, 0.4+0.1j],
[ 1.0+5.j , 2.0+4.j , 3.0+3.j , 4.0+2.j , 5.0+1.j ]])
Die docs mit allen Spalten einen langen Format-String zeigen, aber offenbar eine Liste von Strings arbeitet
In [36]: ['%f %f']*5
Out[36]: ['%f %f', '%f %f', '%f %f', '%f %f', '%f %f']
savetxt
verbindet diese Liste mit dem Trennzeichen, um eine lange Formatzeichenfolge zu erstellen.
In [37]: np.savetxt('test.txt',arr1, fmt=['%f %f']*5, delimiter=',')
In [38]: cat test.txt
0.000000 5.000000,1.000000 4.000000,2.000000 3.000000,3.000000 2.000000,4.000000 1.000000
...
Für loadtxt
das Trennzeichen zwischen komplexen Teilen und Spalten kompatibel sein:
In [39]: np.savetxt('test.txt',arr1, fmt=['%f %f']*5, delimiter=' ')
In [40]: cat test.txt
0.000000 5.000000 1.000000 4.000000 2.000000 3.000000 3.000000 2.000000 4.000000 1.000000
...
In Summe, die Speichern/Laden Rundfahrt am einfachsten ist, wenn die save
mit Last-kompatible Formate erfolgt.