Hier ist eine wirklich gute Diskussion: stackoverflow.com/questions/5836335/… Sie müssen wirklich durch die Kommentare stapfen und beachten, dass Robert Kern ein numpy Entwickler ist
JohnE
Antworten:
88
Wenn Sie den Startwert festlegen möchten, zu dem Aufrufe np.random...verwendet werden, verwenden Sie np.random.seed:
Ihre Antwort macht Sinn. Aber wie ist die Dokumentation nicht verwirrend? This method is called when RandomState is initialized. It can be called again to re-seed the generator.Es sagt nichts über die Tatsache aus, dass ich beim Aufrufen dieser Methode nur eine globale Instanz (oder was auch immer) und keine der anderen RandomStateInstanzen betroffen habe .
Max
2
Ja, ich stimme zu. In der numpy.randomModuldokumentation sollte klar angegeben sein, dass das Modul effektiv mit einer Instanz von initialisiert wurde RandomState. Aber es gibt überhaupt keine Dokumentation zum Modul selbst, die ich finden kann.
Askewchan
11
np.random.RandomState()erstellt einen Zufallszahlengenerator. Es hat keine Auswirkungen auf die freistehenden Funktionen in np.random, muss aber explizit verwendet werden:
Diese Methode wird aufgerufen, wenn RandomState initialisiert wird. Es kann erneut aufgerufen werden, um den Generator neu zu starten. Weitere Informationen finden Sie unter RandomState.
classnumpy.random.RandomState
Container für den Pseudozufallszahlengenerator Mersenne Twister.
Wenn ich jedoch RandomState (1234) aufrufe und mit random.uniform () eine Zahl erstelle, sind die Ergebnisse nicht reproduzierbar. Wofür wird ein Container wie RandomState verwendet?
@eran, eigentlich liegt es daran, dass Sie eine andere Instanz der Klasse erstellen. Sehen Sie meine Antwort, um zu sehen, wie man es benutzt.
Askewchan
1
Vielen Dank! Ich verstehe es jetzt. Ziemlich einfach. Der Dokumentation fehlte nur ein richtiges Beispiel. Oder ich hatte einen Blindspot ...
eran
0
np.random.RandomState () - eine Klasse, die mehrere Methoden basierend auf unterschiedlichen Wahrscheinlichkeitsverteilungen bereitstellt.
np.random.RandomState.seed () - wird aufgerufen, wenn RandomState () initialisiert wird.
Willkommen bei SO! Vielen Dank für Ihre Zeit bei der Beantwortung dieser Frage. Können Sie bitte weitere Details zu Ihrer Lösung angeben? Warum ist Ihre Lösung beispielsweise besser als die akzeptierte Antwort? Auch die Frage wurde vor 6 Jahren gestellt und beantwortet. Achten Sie bei der Beantwortung auf das Datum der ursprünglichen Frage. Bitte lesen Sie Wie man antwortet .
Antworten:
Wenn Sie den Startwert festlegen möchten, zu dem Aufrufe
np.random...
verwendet werden, verwenden Sienp.random.seed
:np.random.seed(1234) np.random.uniform(0, 10, 5) #array([ 1.9151945 , 6.22108771, 4.37727739, 7.85358584, 7.79975808]) np.random.rand(2,3) #array([[ 0.27259261, 0.27646426, 0.80187218], # [ 0.95813935, 0.87593263, 0.35781727]])
Verwenden Sie die Klasse, um Auswirkungen auf den globalen Numpy-Status zu vermeiden:
r = np.random.RandomState(1234) r.uniform(0, 10, 5) #array([ 1.9151945 , 6.22108771, 4.37727739, 7.85358584, 7.79975808])
Und es hält den Staat wie bisher aufrecht:
r.rand(2,3) #array([[ 0.27259261, 0.27646426, 0.80187218], # [ 0.95813935, 0.87593263, 0.35781727]])
Sie können den Status der Art 'globaler' Klasse mit folgender Adresse anzeigen:
und Ihrer eigenen Klasseninstanz mit:
quelle
This method is called when RandomState is initialized. It can be called again to re-seed the generator.
Es sagt nichts über die Tatsache aus, dass ich beim Aufrufen dieser Methode nur eine globale Instanz (oder was auch immer) und keine der anderenRandomState
Instanzen betroffen habe .numpy.random
Moduldokumentation sollte klar angegeben sein, dass das Modul effektiv mit einer Instanz von initialisiert wurdeRandomState
. Aber es gibt überhaupt keine Dokumentation zum Modul selbst, die ich finden kann.np.random.RandomState()
erstellt einen Zufallszahlengenerator. Es hat keine Auswirkungen auf die freistehenden Funktionen innp.random
, muss aber explizit verwendet werden:>>> rng = np.random.RandomState(42) >>> rng.randn(4) array([ 0.49671415, -0.1382643 , 0.64768854, 1.52302986]) >>> rng2 = np.random.RandomState(42) >>> rng2.randn(4) array([ 0.49671415, -0.1382643 , 0.64768854, 1.52302986])
quelle
random.seed ist eine Methode zum Füllen des random.RandomState- Containers.
von numpy docs:
numpy.random.seed(seed=None)
class numpy.random.RandomState
quelle
np.random.RandomState () - eine Klasse, die mehrere Methoden basierend auf unterschiedlichen Wahrscheinlichkeitsverteilungen bereitstellt.
np.random.RandomState.seed () - wird aufgerufen, wenn RandomState () initialisiert wird.
quelle