Ich versuche eine Datei zu teilen, die wie folgt formatiert ist:
%Vor% Die Kombination @target Gx.Sy
ist eindeutig und jede Datengruppe wird immer durch &
terminiert.
Ich habe es geschafft, die Datei in Brocken als:
zu teilen %Vor%Ich habe zwei Probleme:
1) Die Präambelzeilen vor den echten Daten werden ebenfalls gruppiert, so dass das Skript nicht funktioniert, wenn eine Präambel vorhanden ist. Es ist unmöglich vorherzusagen, wie viele Zeilen das wären; Aber ich versuche nach die @target
und
2) Ich möchte die Arrays als G0 [S0, S0] und G1 [S1, S2] bezeichnen; aber ich kann das nicht tun.
Freundliche Hilfe
UPDATE : Ich versuche, diese Daten in einem verschachtelten np Array von G0 [S0, S1, ...], G1 [S0, S1, ..] zu speichern, so dass ich es in Matplotlib verwenden kann.
Die folgenden Funktionen erledigen die Aufgabe:
%Vor%Um Ihre Datei in Stücke zu teilen, müssen Sie nur diesen Code ausführen:
%Vor% chunks
ist ein Wörterbuch, in dem der Schlüssel G
(entweder 0
oder 1
) lautet:
Der Wert von dictionary chunks
ist ein anderes Wörterbuch, in dem der Schlüssel S
( 0
, 1
oder 2
in diesem Beispiel) ist und der Wert ein NumPy-Array ist, das die numerischen Daten für enthält %Code%. Sie können auf diesen Datenblock wie folgt zugreifen: Gi.Sn
, wobei die Indizes chunks[i][n]
und i
die Werte von n
bzw. G
sind.
S
ist chunks[i][n].shape[0]
für alle 2
und i
, aber n
kann einen beliebigen Wert annehmen, d. h. die Anzahl der Zeilen numerischer Daten kann von Chunk zu Chunk variieren.
Dies ist die Datei, die ich im Beispiellauf verwendet habe. Es besteht aus sechs Teilen, nämlich chunks[i][n].shape[1]
, G0.S0
, G0.S1
, G0.S2
, G1.S0
und G1.S1
.
Hier ist ein Ansatz, der einen Generator und np.genfromtxt
verwendet. Vorteil: Licht auf Speicher. Es filtert die Datei on the fly daher erfordert nicht das gesamte Ding zur Verarbeitung in den Speicher zu laden.
UPDATE:
Ich habe den Code gestrafft und das Ausgabeformat in Arrays von Arrays geändert.
Wenn beispielsweise G
zwischen 0...3
und S
zwischen 0...5
liegt, wird ein 4x6-Array mit Arrays erstellt.
BEARBEITEN - Ich nahm das Feedback zu meiner Liste und entschied, es zu einem Diktat zu machen. Diese Lösung hat den Vorteil, dass sie den Speicherverbrauch gering hält und vollständig dynamisch ist (d. H. Nicht von der Kenntnis der Anzahl von G-Blöcken a priori abhängt.
Ich habe das re
-Paket verwendet, das ähnlich ist wie numpy
behandelt I / O über loadtxt()
. Außerdem gibt es wirklich keinen Punkt , der ein verschachteltes numpy Array von numpy Arrays erzeugt, Ich gebe nur eine verschachtelte integrierte list
of numpy Arrays zurück. Da Ihre Daten inhomogen sind, ist dieser Ansatz genauso effizient (und viel einfacher):
Der Zugriff erfolgt einfach durch Übergeben der richtigen G, S-Koordinate an die zurückgegebene chunk_arr
.
Tags und Links split python-3.x numpy file