Der von Python eingebaute Zufallsgenerator random kennt die Funktion jumpahead(n). Mit Hilfer dieser Funktion ist es sehr einfach mit Multi-Processing Zufallszahlen zu erzeugen.
Beispiel:
Code: Alles auswählen
# Prozess 0
import random
random.seed()
random_state = random.getstate()
# Nun random_state an Prozesse verteilen und je 100000 Zahlen generieren
# Prozess 1
random.setstate(random_state)
random.jumpahead(0)
return [random.random() for i in xrange(100000)]
# Prozess 2
random.setstate(random_state)
random.jumpahead(100000)
return [random.random() for i in xrange(100000)]
# Prozess 3
random.setstate(random_state)
random.jumpahead(200000)
return [random.random() for i in xrange(100000)]
# und so weiter
Mit NumPy kann ich Bereiche würfeln (numpy.random.rand(1000)), viel schneller als der eingebaute Python Zufallsgenerator. Ich vermisse aber die jumpahead Funktion bei numpy.random.
Ein möglicher Workaround wäre:
Code: Alles auswählen
def jumpahead(n):
x = 100000
# For Loop über Ganzahldivision von n/x wegen Speicherverbrauch
for i in xrange(n/x):
numpy.random.rand(x)
# Nun noch der Rest
numpy.random.rand(n%x)
Gibt es einen besseren Workaround, irgendwelche Alternativen?
Bin für jeden Hinweis dankbar.