Wie funktioniert Pythonic garbage collection mit numpy-array-fügt und löscht?

Ich versuche zur Anpassung der zugrunde liegenden Struktur des Zeichnens-code (matplotlib), die aktualisiert wird, auf einen timer, um zu gehen von der Verwendung von Python-Listen für die Darstellung von Daten zu verwenden numpy-arrays. Ich möchte in der Lage sein, um den unteren der Zeit Schritt für die Handlung, so viel wie möglich, und da die Daten bis in die Tausende von Punkte, ich verliere wertvolle Zeit schnell, wenn ich nicht kann. Ich weiß, dass numpy-arrays sind bevorzugt für diese Art der Sache, aber ich habe Schwierigkeiten, herauszufinden, wenn ich denke, wie ein Python-Programmierer, und wenn ich denke, wie ein C++ - Programmierer optimale Effizienz der Speicher-Zugriff.

Heißt es in der scipy.org docs für die append () - Funktion, die es gibt eine Kopie des arrays angehängt, zusammen. All diese Kopien bekommen, garbage Collection-richtig? Zum Beispiel:

import numpy as np

a = np.arange(10)
a = np.append(a,10)
print a

Dies ist meine Lektüre von was ist Los auf der C++-Ebene, aber wenn ich wüsste, was ich Rede, würde ich nicht Fragen, also bitte korrigieren Sie mich, wenn ich falsch bin! =P

Zuerst ein block mit 10 Ganzzahlen zugewiesen bekommt, und das symbol zeigt auf den Anfang des Blocks. Dann einen neuen block 11 ganze zahlen zugeordnet, für die insgesamt 21 ints (84 bytes) verwendet wird. Dann wird der Zeiger bewegt wird, um den start der 11-int block. Meine Vermutung ist, dass dadurch die garbage-collection-Algorithmus Dekrementieren der Verweis für die Zählung der 10-int-block auf null und de-Zuweisung von it. Ist das richtig? Wenn nicht, wie kann ich dafür sorgen, dass ich nicht erstellen, overhead beim Anhängen?

Ich bin auch nicht sicher, wie Sie Sie richtig löschen ein numpy-array, wenn ich fertig bin, es zu benutzen. Ich habe eine reset-Taste auf meinem Grundstücke, die nur spült alle Daten und startet über. Wenn ich hatte Listen, dies war mit del data[:]. Gibt es eine entsprechende Funktion zum numpy-arrays? Oder sollte ich einfach sagen, data = np.array([]) und zählen Sie auf, dass der garbage collector die Arbeit zu tun für mich?

InformationsquelleAutor pr0crastin8r | 2010-08-06
Schreibe einen Kommentar