Warum ist numpy langsamer als python? Wie macht man Code besser?

7

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?

    
user2173836 16.05.2013, 20:40
quelle

4 Antworten

14

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:

%Vor%

Hier vermeiden die Funktionen f und g jedesmal das erneute Erstellen der Listen / Arrays und wir erhalten eine sehr ähnliche Performance:

%Vor%

Beachten Sie, dass list-comp + zip immer noch gewinnt. Wenn wir die Arrays jedoch ausreichend groß machen, gewinnt numpy die Hände:

%Vor%

Meine Ergebnisse sind:

%Vor%     
mgilson 16.05.2013, 20:43
quelle
3
%Vor%

Probieren Sie es mit größeren Arrays ... selbst mit dem Overhead beim Erstellen von Arrays ist numpy viel schneller

    
Joran Beasley 16.05.2013 20:48
quelle
2

Numpy-Datenstrukturen sind langsamer beim Hinzufügen / Konstruieren

Hier einige Tests:

%Vor%

Ergebnisse:

%Vor%     
Gill Bates 16.05.2013 20:51
quelle
-1

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.

    
cachorrocadi 17.05.2013 10:52
quelle

Tags und Links