Ich möchte mein Python-Programm mit Cython schnell machen, aber meine innere Schleife führt immer noch langsame Python-Aufrufe an den Zufallszahlengenerator durch! Vor einigen Jahren wurde dasselbe Problem von jemandem angesprochen, der Salbei unterstützt, und es schien zu diesem Zeitpunkt keine gute Lösung zu geben. Es ist für mich nicht bequem, eine lange Liste von Zufallsstichproben vorab zu erstellen, da ich tatsächlich Stichproben aus verschiedenen Verteilungen auf eine Weise mache, die von früheren Stichproben abhängig ist.
Hier ist ein Blog-Beitrag, in dem erklärt wird, wie dies durch die Verbindung von Cython zu GSL behoben wurde:
http://pyinsci.blogspot.com/2010/12/efficient-mcmc-in-python-errata-and.html
Und ein Stackoverflow-Beitrag von jemandem, der versucht, den gsl-Kludge zu implementieren:
/programming/8177446/random-number-generators-to-work-on-x86-64
quelle
Antworten:
Cython beschleunigt den Code, indem die Typmehrdeutigkeit beseitigt wird. Da random.py ein reines Python-Modul ist, können Sie es einfach kopieren und die Typen zu den Funktionen hinzufügen, die Sie benötigen. Dann kann Cython den dynamischen Overhead weg optimieren.
quelle
Nach aterrel Vorschlag, könnten Sie verwenden ,
pyximport
um automatisch das kompilierenrandom
Modul :Dies macht es jedoch immer noch nicht so schnell, wie es wäre, wenn Sie statische Typen für die Variablen in Cython deklarieren würden.
quelle
Ich bin mir nicht sicher, ob diese kürzlich hinzugefügt wurden, aber es scheint, dass es jetzt einfache Möglichkeiten gibt, Zufallszahlen schnell und ohne allzu großen Aufwand zu generieren. Aus diesem Artikel über Monte-Carlo-Simulationen in Cython können wir machen
Soweit ich weiß, müssen Sie beim Kompilieren nichts Besonderes tun.
Zur Reproduzierbarkeit während des Tests können Sie einen Samen setzen
quelle