Seite 1 von 1

Python compilieren für quantitative Simulation

Verfasst: Samstag 1. August 2015, 11:02
von consuli
Hallo,

ich möchte eine Simulation in Python machen. In der Simulation werde ich auf die Pakete Pandas, Scipy und Numpy zurück greifen.

Welche Möglichkeiten habe ich, den Python Code zu compilieren? Ich möchte NICHT C/ C++ in Python einbetten (weil ich kein C kann).

Consuli

Re: Python compilieren für quantitative Simulation

Verfasst: Samstag 1. August 2015, 11:13
von DasIch
Grundsätzlich kompiliert man Python Code nicht. Es gibt zwar durchaus Möglichkeiten Python zu kompilieren aber die eignen sich nur unter bestimmten Umständen. Insofern wäre es gut zu wissen wieso du deinen Python Code überhaupt kompilieren möchtest.

Re: Python compilieren für quantitative Simulation

Verfasst: Samstag 1. August 2015, 16:25
von consuli
Das ist eine äusserst rechenintensive Simulation von schiefen Verteilungen mit sehr vielen Iterationen. Aus Performancegründen möchte ich den Code daher compilieren. Wegen der Performance bin ich für diese Aufgabe von R nach Python ausgewichen.

Welche Möglichkeiten gibt es denn überhaupt Python Code zu compilieren?
Eignen sie sich wegen der numerischen Libraries Pandas, Scipy und Numpy nicht?

Consuli

Re: Python compilieren für quantitative Simulation

Verfasst: Samstag 1. August 2015, 16:50
von BlackJack
@consuli: Einfach so Python-Code zu ”kompilieren” bringt nicht viel. Die Sprache ist zu dynamisch um sie (statisch) effizient in ”nativen” Code zu übersetzen. Darum gibt es ja Bibliotheken wie `numpy` wo die Rechnungen dann in Code ausgeführt werden der in C oder Fortran geschrieben ist. Wenn also etwas zu langsam ist, muss man in der Regel entweder selber Teile in C, C++, oder Fortran schreiben und dann in das Python-Programm einbinden, oder eine Sprache wie Cython verwenden, also Python das um Typannotationen erweitert ist und das in ein C-Modul übersetzt werden kann.

Re: Python compilieren für quantitative Simulation

Verfasst: Samstag 1. August 2015, 18:35
von Sirius3
@consuli: Python mit numpy ist nur schnell, wenn die Hauptarbeit innerhalb von numpy passiert und nur wenige Schleifendurchgänge in reinem Python. Viele Probleme lassen sich so formulieren, dass diese Bedingung erfüllt ist. Aber dazu müßtest Du Deinen Algorithmus zeigen.

Re: Python compilieren für quantitative Simulation

Verfasst: Sonntag 2. August 2015, 09:41
von jens
Evtl. Kann hier PyPy helfen?!?

Re: Python compilieren für quantitative Simulation

Verfasst: Sonntag 2. August 2015, 10:07
von consuli
Danke BlackJack.
BlackJack hat geschrieben:Wenn also etwas zu langsam ist, muss man in der Regel entweder selber Teile in C, C++, oder Fortran schreiben und dann in das Python-Programm einbinden
Ja, das kann man in R auch. Leider habe ich keine entsprechenden C, C++ oder Fortran Kenntnisse.

Nur mal Interesse halber. Kann man in eingebetttetem C, C++ und Fortran auf die Datentypen von Pandas und Numpy zurückgreifen, die imho für quantitative Datenanalyseaufgaben sehr hilfreich sind? Wo findet man dazu eine Dokumentation?
BlackJack hat geschrieben: oder eine Sprache wie Cython verwenden, also Python das um Typannotationen erweitert ist und das in ein C-Modul übersetzt werden kann.
Kann man in Cython die Bibliotheken Pandas, Scipy und Numpy einbinden? Wie kompliziert ist das? Kann man die Anaconda Distribution um Cython erweitern?

Consuli

Re: Python compilieren für quantitative Simulation

Verfasst: Sonntag 2. August 2015, 10:15
von consuli
Sirius3 hat geschrieben:@consuli: Python mit numpy ist nur schnell, wenn die Hauptarbeit innerhalb von numpy passiert und nur wenige Schleifendurchgänge in reinem Python. Viele Probleme lassen sich so formulieren, dass diese Bedingung erfüllt ist. Aber dazu müßtest Du Deinen Algorithmus zeigen.
Bisher habe ich den Algorithmus erst in R. Auch in R wird ein Grossteil der Arbeit von internenen vektorisierenden Funktionen gemacht, die in C, C++ oder Fortran geschrieben. Von daher weiss ich, wie rechenintensiv der Algorithmus ist. Von daher erlaube ich mir vorher über die Performance nachzudenken, bevor ich implementiere.