Speichern numpy-array in csv erzeugt TypeError Mismatch
Habe ich ein numpy-array mit numerischen Daten in der form:
example = numpy.array([[[i for i in range(0, 5)],[0 for j in range(0, 5)]] for k in range(0, 10)])
Es ist also array von 10 Gruppen, wobei jede Gruppe besteht aus 2 Listen die gleiche Länge und enthält nur die zahlen.
Mit dem folgenden code speichern gibt mir den folgenden Fehler:
numpy.savetxt('exampleData.csv', test, delimiter=',')
TypeError: Mismatch between array dtype ('int32') and format specifier ('%.18e %.18e')
Ich vermute, dies könnte behoben werden, mit etwas in der fmt='xyz' - argument, aber die Dokumentation ist nicht besonders deutlich. Jede Hilfe würde geschätzt werden.
(In meiner tatsächlichen Daten, die i-und j-Listen sind Listen von langen Schwimmern, z.B.'0.0047322940571' etc.)
- Versuchen
example = numpy.array([[[float(i) for i in range(0, 5)],[0 for j in range(0, 5)]] for k in range(0, 10)])
und sehen, ob der Fehler weiterhin besteht. Alternativ versuchen ein format wiefmt='%04d'
imsavetxt
nennen. - In meinem eigentlichen code, der Daten für i und j sind beide Wagen, ich denke der Fehler rührt von der Tatsache, dass es ist nicht zu erwarten, ein Dritter Wert in k.
- Was die Form des Arrays?
savetxt
funktioniert nur mit 2d-arrays. Was ist seinedtype
? - Ahh, das würde es erklären, ich denke, es würde klassifizieren als 3D-array... Was sollte ich stattdessen verwenden?
- Welche Art von layout erwarten Sie? Normalerweise CSV ist nur viele Zeilen der Spalten vergleichen. Die Leser haben in der Regel Probleme mit Leerzeilen oder Zeilen mit einer unterschiedlichen Anzahl von Spalten. Spalten unterscheiden sich in der Art des content - strings, ints, floats, aber Sie sollte konsistent sein.
- Öffnen Sie eine 2D-CSV-Datei erzeugt ein zwei-line-Dokument, ich hätte gedacht, dass ein 3D-array erzeugen würde 2*k-Linien...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
example
ist ein 3d-arrayversucht zu retten, das ganze ergibt ein Fehler (eine andere Nachricht wegen der unterschiedlichen version):
aber wenn eine 'Reihe' ist ok
Sparen mit integer-format macht eine schönere Ausgabe
Also wie willst du das 3d-array gespeichert werden? Halten Sie im Verstand, wie Sie es benutzen/Lesen. Mehrere Dateien? Mehrere Blöcke innerhalb einer Datei?
https://stackoverflow.com/a/3685339/901925
ist eine 6 jährige SO beantworten, wie Sie sparen ein 3d-array. Die einfache Antwort ist, eine Datei zu öffnen, und führen Sie mehrere
savetxt
für die slices der Reihe. Dieser speichert die Daten in Blöcke. Aber laden Sie die Blöcke ist eine andere Frage (das kommt vor).Antwort auf dein Kommentar, das funktioniert
Anderen Weg, um zu sparen ein 3d-array ist, neu zu gestalten, es zu 2d. Sie Form zurück zu 3d nach dem laden, möglicherweise mithilfe von Informationen, die Sie gespeichert in einem Kommentar
savetxt
wiederholt auf die 1. dimension des Arrays, und für jederow
, schreibtformat % tuple(row)
.format
ist abgeleitet von Ihrenfmt
parameter und die.shape[1]
Ihrer Eingabe.