Ich warte darauf, dass ein anderer Entwickler einen Code fertigstellt, der ein np-Array mit einer Form (100.2000) mit Werten von entweder -1,0 oder 1 zurückgibt.
In der Zwischenzeit möchte ich zufällig ein Array mit denselben Merkmalen erstellen, damit ich einen Vorsprung bei meiner Entwicklung und beim Testen habe. Die Sache ist, dass ich möchte, dass dieses zufällig erstellte Array jedes Mal gleich ist, damit ich nicht gegen ein Array teste, dessen Wert sich jedes Mal ändert, wenn ich meinen Prozess erneut ausführe.
Ich kann mein Array so erstellen, aber es gibt eine Möglichkeit, es so zu erstellen, dass es jedes Mal gleich ist. Ich kann das Objekt einlegen und entfernen, frage mich aber, ob es einen anderen Weg gibt.
r = np.random.randint(3, size=(100, 2000)) - 1
numpy.random.seed()
Funktion eingeschlichen, als ich nicht aufgepasst habe . :-) Ich habe es absichtlich aus dem Originalmodul herausgelassen. Ich empfehle den Leuten, ihre eigenen Instanzen zu verwendenRandomState
und diese Objekte weiterzugeben.numpy.random.seed()
abgeraten wird, sollte dies in der Dokumentation erwähnt werden . Anscheinend teilen andere Mitwirkende an NumPy Roberts Meinung nicht. Nichts für ungut, ich bin nur neugierig.random.seed
Verwendung einesrandom.Random
Objekts in der Python-Standardbibliothek. Wenn Sierandom.seed
oder verwendennumpy.random.seed
, setzen Sie alle zufälligen Instanzen ein, sowohl in Ihrem Code als auch in jedem Code, den Sie aufrufen, oder in jedem Code, der in derselben Sitzung wie Ihre ausgeführt wird. Wenn diese Dinge davon abhängen, dass diese Dinge tatsächlich zufällig sind, treten Probleme auf. Wenn Sie Code bereitstellen, der den zufälligen Startwert festlegt, können Sie eine Sicherheitslücke einführen.Erstellen Sie Ihre eigene Instanz von
numpy.random.RandomState()
mit Ihrem ausgewählten Samen. Verwenden Sie diese Optionnumpy.random.seed()
nur, um unflexible Bibliotheken zu umgehen, mit denen Sie Ihre eigeneRandomState
Instanz nicht weitergeben können.quelle
numpy.random.seed()
? Ich weiß, dass es nicht threadsicher ist, aber es ist sehr praktisch, wenn Sie keine Thread-Sicherheit benötigen.numpy.random
, können Sie später keine unabhängigen Streams erstellen. Es ist auch einfacher, Bibliotheken mit der Absicht zu schreiben, PRNG-Streams zu steuern. Es gibt immer mehrere Möglichkeiten, Ihre Bibliothek zu betreten, und jede von ihnen sollte eine Möglichkeit haben, den Startwert zu steuern. Das Weitergeben von PRNG-Objekten ist eine sauberere Methode, als sich darauf zu verlassennumpy.random.seed()
. Leider ist dieses Kommentarfeld zu kurz, um weitere Beispiele zu enthalten. :-)numpy.random.RandomState()
ohne Argumente. Dadurch wird der Status mit eindeutigen Werten versehen, die für solche Dinge aus Ihren Betriebssystemfunktionen stammen (/dev/urandom
auf UNIX-Computern und dem dortigen Windows-Äquivalent). Wennnumpy.random.RandomState(1234567890)
dies bei Ihnen nicht funktioniert, zeigen Sie bitte genau an, was Sie eingegeben haben, und genau die Fehlermeldung, die Sie erhalten haben.numpy.random.RandomState()
ohne Argumente für die besten Ergebnisse.Wenn Sie andere Funktionen verwenden, die auf einem zufälligen Status basieren, können Sie nicht nur einen Gesamtsamen festlegen, sondern sollten stattdessen eine Funktion erstellen, um Ihre zufällige Liste von Zahlen zu generieren und den Startwert als Parameter der Funktion festzulegen. Dies wird keine anderen Zufallsgeneratoren im Code stören:
quelle
Es ist wichtig zu verstehen, was der Keim eines Zufallsgenerators ist und wann / wie er in Ihrem Code festgelegt ist (siehe z. B. hier für eine schöne Erklärung der mathematischen Bedeutung des Keims).
Dazu müssen Sie den Samen setzen, indem Sie Folgendes tun:
Es ist dann wichtig, die Zufallszahlen aus random_state und nicht aus np.random zu generieren. Dh du solltest tun:
anstatt
Dadurch wird eine neue Instanz von RandomState () erstellt und im Grunde genommen die interne Uhr Ihres Computers verwendet, um den Startwert festzulegen.
quelle
Ich möchte nur etwas in Bezug auf die Antwort von @Robert Kern klarstellen, nur für den Fall, dass dies nicht klar ist. Selbst wenn Sie das verwenden
RandomState
, müssten Sie es jedes Mal initialisieren, wenn Sie eine numpy-Zufallsmethode wie in Roberts Beispiel aufrufen. Andernfalls erhalten Sie die folgenden Ergebnisse.quelle