Ich versuche, die zugrunde liegende Struktur des Plotting-Codes (Matplotlib) anzupassen, die auf einem Timer aktualisiert wird, von Python-Listen für die Plot-Daten zu verwenden, um numpy Arrays zu verwenden. Ich möchte den Zeitschritt für die Handlung so weit wie möglich verringern können, und da die Daten in die Tausende von Punkten aufsteigen können, verliere ich schnell wertvolle Zeit, wenn ich nicht kann. Ich weiß, dass numpige Arrays für solche Dinge bevorzugt werden, aber ich habe Probleme herauszufinden, wann ich wie ein Python-Programmierer denken muss und wann ich wie ein C++ - Programmierer denken muss, um meine Effizienz beim Speicherzugriff zu maximieren.Wie hängt Pythonic Garbage Collection mit numpy Array an und löscht?
In den Dokumenten von scipy.org wird für die Funktion append() angegeben, dass eine Kopie der angehängten Arrays zurückgegeben wird. Werden all diese Kopien richtig gesammelt? Zum Beispiel:
import numpy as np
a = np.arange(10)
a = np.append(a,10)
print a
Dies ist meine Lektüre von dem, was auf der C vorgeht ++ - Ebene, aber wenn ich wusste, was ich rede, ich würde nicht die Frage stellen, so bitte korrigieren Sie mich, wenn ich 'Ich liege falsch! = P
Zuerst wird ein Block von 10 Ganzzahlen zugewiesen, und das Symbol a zeigt auf den Anfang dieses Blocks. Dann wird ein neuer Block von 11 ganzen Zahlen zugewiesen, wobei insgesamt 21 Bits (84 Bytes) verwendet werden. Dann wird der a-Zeiger zum Anfang des 11-int-Blocks bewegt. Meine Vermutung ist, dass dies dazu führen würde, dass der Müllsammlungsalgorithmus den Referenzzählwert des 10-int-Blocks auf Null dekrementiert und die Zuweisung rückgängig macht. Ist das richtig? Wenn nicht, wie stelle ich sicher, dass ich beim Anhängen keinen Overhead erzeuge?
Ich bin auch nicht sicher, wie man ein numpy Array richtig löscht, wenn ich es benutze. Ich habe einen Reset-Knopf auf meinen Plots, der einfach alle Daten löscht und von vorne beginnt. Als ich Listen hatte, wurde dies mit del data[:]
gemacht. Gibt es eine äquivalente Funktion für numpy Arrays? Oder sollte ich einfach data = np.array ([]) sagen und auf den Garbage Collector zählen, um die Arbeit für mich zu erledigen?
Also im Grunde muss ich mich entspannen. =) Dank für die Klarstellung, dachte ich, dass so die Dinge funktionierten, aber ich war nicht 100% klar darauf. – pr0crastin8r