Schnellste Weg, um füllen numpy-array mit Zufallszahlen

Gibt es einen schnelleren Weg, um ein numpy-array gefüllt mit Zufallszahlen als die integrierten numpy.random.rand(count) Funktion? Ich weiß, dass die eingebaute Methode ist die Verwendung des Mersenne Twister.

Möchte ich nutzen, numpy für die monte-carlo-Simulationen, und das abrufen der Zufallszahlen nimmt einen erheblichen Teil der Zeit. Ein einfaches Beispiel, Berechnung von pi durch monte-carlo-integration mit 200E6 Zufallszahlen ist nur die Verarbeitung über 116.8 MB/s durch mein Programm. Ein comprable Programm geschrieben in C++ mit xor128() als generator verarbeitet mehrere hundert MB/s.

EDIT: Falsch berechnet generation rate

  • erzeugen einer Datei und laden Sie von dort? nicht die beste, aber wahrscheinlich die einfachste.
  • Wenn alle Stricke reißen, können Sie immer schreiben Sie Ihre eigene random fill Funktion, die in C oder C++: docs.scipy.org/doc/numpy/user/c-info.how-to-extend.html
  • Das problem ist, dass ich habe Simulationen laufen lange genug, um Hunderte von Terabyte an Daten.
  • Sind Sie timing die ganze simulation, oder einfach nur die random number generation? (Wenn Sie das timing der Zufallszahl-generation, sind beide Programme produzieren eine ganze Reihe von zahlen, oder hat der C++ - code zu verwerfen, jede Zahl, die vor der Produktion des nächsten?)
  • Ich bin das timing der gesamten simulation, aber ich kann sehen, aus cProfile, dass die random.rand Funktion nimmt eine Menge Zeit. Der C++ - code-Puffer über 10000 zahlen auf einmal. Das python-Programm arbeitet auf volle Größe arrays.
  • Durch das hinzufügen einer Schleife, um das python-Programm, so dass die einzelnen numpy-array ist kleiner hat mehr Geschwindigkeit. Sie sind ziemlich vergleichbar jetzt, python=4,2 Sekunden, C++=3.38 Sekunden. Sowohl die Durchführung in mehreren hundert MB/s jetzt.

InformationsquelleAutor chew socks | 2013-11-07
Schreibe einen Kommentar