Ich reviere mein neuronales Netz von reinem Python zu numpy, aber jetzt arbeitet es noch langsamer. Also habe ich diese zwei Funktionen ausprobiert:
%Vor%Zeitangabe d = 1.77135205057
time it = 17.2464673758
Numpy ist 10 mal langsamer. Warum ist es so und wie benutzt man numpy richtig?
Ich würde annehmen, dass die Diskrepanz darin besteht, dass Sie Listen und Arrays in e
erstellen, während Sie nur Listen in d
erstellen. Überlegen Sie:
Hier vermeiden die Funktionen f
und g
jedesmal das erneute Erstellen der Listen / Arrays und wir erhalten eine sehr ähnliche Performance:
Beachten Sie, dass list-comp + zip
immer noch gewinnt. Wenn wir die Arrays jedoch ausreichend groß machen, gewinnt numpy die Hände:
Meine Ergebnisse sind:
%Vor%Probieren Sie es mit größeren Arrays ... selbst mit dem Overhead beim Erstellen von Arrays ist numpy viel schneller
Numpy-Datenstrukturen sind langsamer beim Hinzufügen / Konstruieren
Hier einige Tests:
%Vor% Ergebnisse:
Ich glaube nicht, dass numpy langsam ist, da es die Zeit zum Schreiben und Debuggen berücksichtigen muss. Je länger das Programm ist, desto schwieriger ist es, Probleme zu finden oder neue Funktionen hinzuzufügen (Programmierzeit). Daher ermöglicht die Verwendung einer Sprache auf höherer Ebene bei gleicher Intelligenz und Fähigkeit, ein komplexes und potenziell effizienteres Programm zu erstellen.
Wie auch immer, einige interessante Tools zur Optimierung sind:
- Psyco ist ein JIT (just in time, "real time"), der zur Laufzeit den Code optimiert.
- Numexpr , die Parallelisierung ist ein guter Weg, um die Ausführung eines Programms zu beschleunigen, vorausgesetzt, dass es ausreichend trennbar ist.
- weben ist ein Modul innerhalb von NumPy, um Python und C zu kommunizieren. Eine seiner Funktionen ist blitz, die eine Zeile von Python, die transparent übersetzt C, und jedes Mal, wenn der Aufruf ausgeführt wird optimierte Version Wenn man diese erste Umwandlung macht, benötigt man etwa eine Sekunde, aber höhere Geschwindigkeiten erhalten im Allgemeinen alle oben genannten Punkte. Es ist nicht wie Numexpr oder Psyco Bytecode oder Schnittstelle C wie NumPy, sondern Ihre eigene Funktion direkt in C geschrieben und vollständig kompiliert und optimiert.
Tags und Links python performance numpy