Was sind die Vorteile von NumPy gegenüber regulären Python-Listen?
Ich habe ungefähr 100 Finanzmarktserien und werde ein Cube-Array von 100x100x100 = 1 Million Zellen erstellen. Ich werde jedes x mit jedem y und z zurückführen (3 Variablen), um das Array mit Standardfehlern zu füllen.
Ich habe gehört, dass ich für "große Matrizen" aus Gründen der Leistung und Skalierbarkeit NumPy im Gegensatz zu Python-Listen verwenden sollte. Ich kenne Python-Listen und sie scheinen für mich zu funktionieren.
Was sind die Vorteile, wenn ich zu NumPy wechsle?
Was wäre, wenn ich 1000 Serien hätte (dh 1 Milliarde Gleitkommazellen im Würfel)?
getsizeof
ist nicht zuverlässig. In der Dokumentation heißt es eindeutig: Es wird nur der direkt dem Objekt zugeordnete Speicherverbrauch berücksichtigt, nicht der Speicherverbrauch der Objekte, auf die es sich bezieht. Dies bedeutet, dass bei verschachtelten Python-Listen die Größe der Elemente nicht berücksichtigt wird.getsizeof
In einer Liste wird nur angegeben, wie viel RAM das Listenobjekt selbst und der von den Zeigern in seinem Datenarray verbrauchte RAM verbraucht. Es wird nicht angegeben, wie viel RAM von den Objekten verbraucht wird, auf die sich diese Zeiger beziehen.float
(4 Bytes) würde zu etwas führen, das näher an 32 GB vonlist
s und Pythonsfloat
(die tatsächlich Cs sinddouble
) liegt, nicht zu 12 GB; Jedesfloat
64-Bit-Python belegt ~ 24 Bytes (vorausgesetzt, es liegen keine Ausrichtungsverluste im Allokator vor), plus weitere 8 Bytes imlist
, um die Referenz zu speichern (und dies ignoriert die Gesamtzuordnung und die Objekt-Header für daslist
s selbst, wodurch abhängig davon möglicherweise weitere GB hinzugefügt werden genau, wie viel Gesamtzuordnung auftritt).NumPy ist nicht nur effizienter. es ist auch bequemer. Sie erhalten viele kostenlose Vektor- und Matrixoperationen, mit denen Sie manchmal unnötige Arbeit vermeiden können. Und sie werden auch effizient umgesetzt.
Sie können Ihren Cube beispielsweise direkt aus einer Datei in ein Array lesen:
Summe entlang der zweiten Dimension:
Finden Sie heraus, welche Zellen über einem Schwellenwert liegen:
Entfernen Sie jede gerade indizierte Scheibe entlang der dritten Dimension:
Viele nützliche Bibliotheken arbeiten auch mit NumPy-Arrays. Zum Beispiel statistische Analyse- und Visualisierungsbibliotheken.
Auch wenn Sie keine Leistungsprobleme haben, lohnt sich das Erlernen von NumPy.
quelle
Alex erwähnte die Speichereffizienz und Roberto erwähnte die Bequemlichkeit, und dies sind beide gute Punkte. Für ein paar weitere Ideen werde ich Geschwindigkeit und Funktionalität erwähnen .
Funktionalität: Mit NumPy, FFTs, Faltungen, schneller Suche, grundlegenden Statistiken, linearer Algebra, Histogrammen usw. ist viel integriert. Und wer kann wirklich ohne FFTs leben?
Geschwindigkeit: Hier ist ein Test zum Ausführen einer Summe über eine Liste und ein NumPy-Array, der zeigt, dass die Summe im NumPy-Array 10x schneller ist (in diesem Test kann der Kilometerstand variieren).
was auf meinen Systemen (während ich ein Backup ausführe) ergibt:
quelle
Hier ist eine nette Antwort aus den FAQ auf der scipy.org-Website :
Welche Vorteile bieten NumPy-Arrays gegenüber (verschachtelten) Python-Listen?
quelle
Alle haben fast alle wesentlichen Unterschiede zwischen Numpy-Array und Python-Liste hervorgehoben. Ich werde sie hier nur kurz erläutern:
Numpy Arrays haben bei der Erstellung eine feste Größe, im Gegensatz zu Python-Listen (die dynamisch wachsen können). Durch Ändern der Größe von ndarray wird ein neues Array erstellt und das Original gelöscht.
Die Elemente in einem Numpy-Array müssen alle denselben Datentyp haben (wir können auch den heterogenen Typ haben, aber das erlaubt Ihnen keine mathematischen Operationen) und haben daher dieselbe Größe im Speicher
Numpy Arrays werden erleichtert, um mathematische und andere Arten von Operationen mit einer großen Anzahl von Daten voranzutreiben. Typischerweise werden solche Operationen effizienter und mit weniger Code ausgeführt, als dies mit in Sequenzen eingebauten Pythons möglich ist
quelle