Python compilieren für quantitative Simulation

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

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
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

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
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
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.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Evtl. Kann hier PyPy helfen?!?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

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
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

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.
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Antworten