@feldmann_markus: Wenn ich mir die ``print``-Anweisungen so anschaue, denke ich Du solltest mal einen Blick in das `logging`-Modul werfen, oder zumindest eine eigene Funtkion daraus machen.
`min_p` verstehe ich nicht. Warum durch 8 teilen? Zu diesem Zeitpunkt ist das doch ein Array mit `complex64`-Elementen. Das ist als *Bytes* achtmal so gross wie die Arrays mit den Wahrheitswerten, aber die Anzahl der Elemente ist ja nicht von der Bytegrösse abhängig. Ausserdem sollte man zur Sicherheit wohl besser die minimale Anzahl von Elementen über alle sechs Arrays ermitteln.
Das mit dem `resize()` machst Du zu kompliziert. Du machst ein zweidimensionales Array daraus und nimmst davon nur die erste Dimension, statt gleich nur eine Dimension anzulegen, bzw. die Grösse der einzelnen Dimension im Array zu ändern. Ausserdem sollte man das mit der Methode auf dem Array machen können und verhindert so eine Kopie des jeweiligen Arrays. Also:
Code: Alles auswählen
# anstelle von:
a_p_1 = numpy.resize(a_p_1,(1,min_p))
a_p_1 = a_p_1[0]
# besser:
a_p_1.resize((min_p,))
Man beachte, dass ich hier die `resize()`-Methode auf dem Array verwende und nicht die `numpy.resize()`-Funktion. Letztere kopiert das Array nämlich, erstere vermeidet das wahrscheinlich.
Man sollte niemals ein "nacktes" ``exept`` ohne konkrete Ausnahmen verwenden. Das behandelt alle Ausnahmen gleich und man sieht keine Ausnahmen mehr, mit denen man nicht gerechnet hat. Zum Beispiel schluckt das einen `NameError` und man bekommt nicht mit, wenn man sich bei einem Namen vertippt. Solche Fehler sind dann nur sehr mühsam zu finden.
Da es Dir auf Geschwindigkeit ankommt, ist es auch ziemlich ungünstig die kompletten alten Daten zu den neuen in den Speicher zu lesen, nur um festzustellen, ob die neuen Daten mehr enthalten als die alten. Und auch das erneute Schreiben der Daten, die man ja zum Grossteil schon einmal geschrieben hat, kostet unnötig Zeit. Es wäre günstiger sich ein Datenformat zum Speichern zu wählen, bei dem man ohne die Daten komplett einzulesen, ermitteln kann wieviele Datenpunkte schon gespeichert sind, dann aus den Messdaten nur den Ausschnitt mit neuen Daten zu lesen, und die dann an die alten Daten anzuhängen. Eine Datenbank würde sich da zum Beispiel anbieten. SQLite ist relativ unkompliziert zu verwenden, oder vielleicht bietet sich hier auch eine hdf5-Datenbank an. Die Python-Anbindung an letztere heisst `PyTables`.
Quelltextwiederholungen sollte man vermeiden. Nach dem ``except`` steht noch mal das gleiche wie im ``else``-Teil innerhalb des ``try``-Blocks dafür. Wenn man da jetzt Änderungen vornimmt, muss man immer daran denken, die an beiden Stellen exakt gleich zu machen. Das ist eine unnötige Fehlerquelle.
Für eine beliebige Anzahl von Bändern kann man Listen mit den Arrays verwenden. Wenn man Namen durchnummeriert, ist das sowieso oft ein Zeichen dafür, dass man besser eine Liste verwenden sollte.
Das ich diese ganzen Bänder-Daten in einer Klasse kapseln würde, erwähnte ich schon einmal, oder?
