Ich bin etwas verwirrt darüber, was random.seed()
in Python funktioniert. Warum machen die folgenden Versuche zum Beispiel das, was sie tun (konsequent)?
>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7
Ich konnte keine gute Dokumentation dazu finden.
python
random
random-seed
Ahaan S. Rungta
quelle
quelle
random.seed
. Normalerweise rufen Sie nur aufrandom.seed()
und es wird die aktuelle Zeit als Startwert verwendet. Dies bedeutet, dass Sie bei jeder Ausführung des Skripts eine andere Folge von Werten erhalten.Antworten:
Pseudozufallszahlengeneratoren arbeiten, indem sie eine Operation an einem Wert ausführen. Im Allgemeinen ist dieser Wert die vorherige vom Generator generierte Zahl. Wenn Sie den Generator zum ersten Mal verwenden, gibt es jedoch keinen vorherigen Wert.
Das Setzen eines Pseudozufallszahlengenerators gibt ihm seinen ersten "vorherigen" Wert. Jeder Startwert entspricht einer Folge von generierten Werten für einen bestimmten Zufallszahlengenerator. Das heißt, wenn Sie zweimal denselben Startwert angeben, erhalten Sie zweimal dieselbe Zahlenfolge.
Im Allgemeinen möchten Sie Ihren Zufallszahlengenerator mit einem Wert versehen, der jede Ausführung des Programms ändert. Zum Beispiel ist die aktuelle Zeit ein häufig verwendeter Startwert. Der Grund, warum dies nicht automatisch geschieht, besteht darin, dass Sie bei Bedarf einen bestimmten Startwert angeben können, um eine bekannte Folge von Zahlen zu erhalten.
quelle
Alle anderen Antworten scheinen die Verwendung von random.seed () nicht zu erklären. Hier ist ein einfaches Beispiel ( Quelle ):
quelle
Du versuchst das.
Angenommen, 'random.seed' gibt dem Zufallswertgenerator ('random.randint ()') einen Wert, der diese Werte auf der Grundlage dieses Startwerts generiert. Eine der wichtigsten Eigenschaften von Zufallszahlen ist, dass sie reproduzierbar sein sollten. Wenn Sie denselben Samen setzen, erhalten Sie das gleiche Muster von Zufallszahlen. Auf diese Weise generieren Sie sie von Anfang an. Sie geben einen anderen Samen - es beginnt mit einer anderen Initiale (über 3).
Bei einem Startwert werden nacheinander Zufallszahlen zwischen 1 und 10 generiert. Sie nehmen also einen Satz von Zahlen für einen Startwert an.
quelle
Eine Zufallszahl wird durch eine Operation mit dem vorherigen Wert erzeugt.
Wenn es keinen vorherigen Wert gibt, wird die aktuelle Zeit automatisch als vorheriger Wert angezeigt. Wir können diesen vorherigen Wert durch eigene liefern mit
random.seed(x)
denenx
beliebige Zahl oder String usw. sein könnteDaher
random.random()
ist eigentlich keine perfekte Zufallszahl, sie könnte über vorhergesagt werdenrandom.seed(x)
.Daher ist das Erzeugen einer Zufallszahl nicht wirklich zufällig, da es auf Algorithmen läuft. Algorithmen liefern immer die gleiche Ausgabe basierend auf der gleichen Eingabe. Dies bedeutet, dass es vom Wert des Samens abhängt. Um es zufälliger zu machen, wird die Zeit automatisch zugewiesen
seed()
.quelle
quelle
Führen Sie das obige Programm mehrmals aus ...
1. Versuch: Gibt 5 zufällige Ganzzahlen im Bereich von 1 bis 100 aus
2. Versuch: Druckt die gleichen 5 Zufallszahlen, die in der obigen Ausführung erschienen sind.
3. Versuch: gleich
.....Demnächst
Erläuterung: Jedes Mal, wenn wir das obige Programm ausführen, setzen wir den Startwert auf 10, und der Zufallsgenerator verwendet dies als Referenzvariable. Durch eine vordefinierte Formel wird eine Zufallszahl generiert.
Wenn Sie also bei der nächsten Ausführung den Startwert auf 10 setzen, wird die Referenznummer erneut auf 10 gesetzt, und das gleiche Verhalten beginnt erneut ...
Sobald wir den Samenwert zurücksetzen, erhalten wir die gleichen Pflanzen.
Hinweis: Ändern Sie den Startwert und führen Sie das Programm aus. Es wird eine andere zufällige Reihenfolge als die vorherige angezeigt.
quelle
In diesem Fall ist zufällig tatsächlich pseudozufällig. Bei einem Startwert werden Zahlen mit gleicher Verteilung generiert. Mit demselben Startwert wird jedoch jedes Mal dieselbe Zahlenfolge generiert. Wenn Sie möchten, dass es sich ändert, müssen Sie Ihren Samen ändern. Viele Leute generieren gerne einen Samen basierend auf der aktuellen Zeit oder so.
quelle
Imho, es wird verwendet, um das gleiche zufällige Kursergebnis zu generieren, wenn Sie es
random.seed(samedigit)
erneut verwenden.quelle
Stellen Sie die
seed(x)
vor dem Generieren eines Satzes von Zufallszahlen ein und verwenden Sie denselben Startwert, um denselben Satz von Zufallszahlen zu erzeugen. Nützlich bei der Reproduktion der Probleme.quelle
Hier ist mein Verständnis. Jedes Mal, wenn wir einen Startwert festlegen, wird ein "Label" oder eine "Referenz" generiert. Der nächste random.function-Aufruf ist an dieses "Label" angehängt. Wenn Sie also das nächste Mal denselben Startwert und dieselbe random.function aufrufen, erhalten Sie dasselbe Ergebnis.
quelle
Hier ist ein kleiner Test, der zeigt, dass das Füttern der
seed()
Methode mit demselben Argument dasselbe pseudozufällige Ergebnis verursacht:quelle
len(set(l))<=1
random.seed(a, version)
in Python wird verwendet, um den Pseudozufallszahlengenerator (PRNG) zu initialisieren .PRNG ist ein Algorithmus, der eine Folge von Zahlen erzeugt, die sich den Eigenschaften von Zufallszahlen annähert. Diese Zufallszahlen können mit dem Startwert reproduziert werden . Wenn Sie also einen Startwert angeben, beginnt PRNG mit einem Startwert aus einem beliebigen Startzustand.
Argument
a
ist der Startwert. Wenn der a-Wert istNone
, wird standardmäßig die aktuelle Systemzeit verwendet.und
version
ist eine Ganzzahl, die angibt, wie der Parameter a in eine Ganzzahl konvertiert wird. Der Standardwert ist 2.Wenn Sie möchten, dass dieselbe Zufallszahl reproduziert wird, geben Sie erneut denselben Startwert ein
Wenn Sie den Startwert nicht angeben, wird eine andere Nummer generiert und nicht wie zuvor 1
Wenn Sie einen anderen Startwert als zuvor angeben, erhalten Sie eine andere Zufallszahl
Wenn Sie also zusammenfassend die gleiche Zufallszahl reproduzieren möchten, geben Sie den Startwert an. Insbesondere der gleiche Samen .
quelle