Nie wiem, co random.seed()
robi się w Pythonie. Na przykład, dlaczego poniższe testy robią to, co robią (konsekwentnie)?
>>> 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
Nie mogłem znaleźć dobrej dokumentacji na ten temat.
python
random
random-seed
Ahaan S. Rungta
źródło
źródło
random.seed
. Zwykle po prostu wywołujeszrandom.seed()
i używa bieżącego czasu jako wartości początkowej, co oznacza, że za każdym razem, gdy uruchamiasz skrypt, otrzymasz inną sekwencję wartości.Odpowiedzi:
Generatory liczb pseudolosowych działają, wykonując pewne operacje na wartości. Na ogół ta wartość jest poprzednią liczbą wygenerowaną przez generator. Jednak przy pierwszym użyciu generatora nie ma poprzedniej wartości.
Wypełnienie generatora liczb pseudolosowych daje mu pierwszą „poprzednią” wartość. Każda wartość początkowa będzie odpowiadać sekwencji generowanych wartości dla danego generatora liczb losowych. Oznacza to, że jeśli podasz dwa razy to samo ziarno, otrzymasz dwukrotnie tę samą sekwencję liczb.
Ogólnie rzecz biorąc, chcesz zapełnić generator liczb losowych jakąś wartością, która będzie zmieniać każde wykonanie programu. Na przykład, często używanym nasieniem jest aktualny czas. Powodem, dla którego nie dzieje się to automatycznie, jest to, że jeśli chcesz, możesz podać określone ziarno, aby uzyskać znaną sekwencję liczb.
źródło
Wszystkie inne odpowiedzi nie wydają się wyjaśniać użycia random.seed (). Oto prosty przykład ( źródło ):
źródło
Spróbuj tego.
Powiedzmy, że „random.seed” podaje wartość do generatora wartości losowych („random.randint ()”), który generuje te wartości na podstawie tego ziarna. Jedną z koniecznych właściwości liczb losowych jest to, że powinny być odtwarzalne. Kiedy umieścisz to samo ziarno, otrzymasz ten sam wzór liczb losowych. W ten sposób generujesz je od samego początku. Dajesz inne ziarno - zaczyna się od innego inicjału (powyżej 3).
Biorąc pod uwagę ziarno, wygeneruje losowe liczby od 1 do 10 jedna po drugiej. Więc zakładasz jeden zestaw liczb dla jednej wartości początkowej.
źródło
Liczba losowa jest generowana przez jakąś operację na poprzedniej wartości.
Jeśli nie ma poprzedniej wartości, bieżący czas jest automatycznie poprzednią wartością. Możemy podać tę poprzednią wartość samodzielnie, używając
random.seed(x)
gdziex
może być dowolna liczba lub ciąg itp.W związku z tym
random.random()
nie jest w rzeczywistości idealną liczbą losową, można ją przewidzieć za pomocąrandom.seed(x)
.Dlatego generowanie liczby losowej nie jest w rzeczywistości losowe, ponieważ działa na algorytmach. Algorytmy zawsze dają to samo wyjście w oparciu o to samo wejście. Oznacza to, że zależy to od wartości nasion. Tak więc, aby uczynić go bardziej losowym, czas jest automatycznie przypisywany
seed()
.źródło
źródło
Wykonaj powyższy program wiele razy ...
Pierwsza próba: wyświetla 5 losowych liczb całkowitych z zakresu 1 - 100
Druga próba: drukuje te same 5 losowych liczb, które pojawiły się w powyższym wykonaniu.
Trzecia próba: to samo
.....Wkrótce
Objaśnienie: Za każdym razem, gdy uruchamiamy powyższy program, ustawiamy ziarno na 10, a następnie generator losowy przyjmuje to jako zmienną odniesienia. Następnie, wykonując predefiniowaną formułę, generuje liczbę losową.
Stąd ustawienie ziarna na 10 w następnym wykonaniu ponownie ustawia numer referencyjny na 10 i znowu zaczyna się to samo zachowanie ...
Jak tylko zresetujemy wartość nasion, daje te same rośliny.
Uwaga: Zmień wartość ziarna i uruchom program, zobaczysz inną losową sekwencję niż poprzednia.
źródło
W tym przypadku losowe jest w rzeczywistości pseudolosowe. Biorąc pod uwagę ziarno, wygeneruje liczby o równym rozkładzie. Ale z tym samym ziarnem za każdym razem wygeneruje tę samą sekwencję liczb. Jeśli chcesz, aby to się zmieniło, musisz zmienić swoje ziarno. Wiele osób lubi generować ziarno na podstawie aktualnego czasu lub czegoś podobnego.
źródło
Imho, służy do generowania tego samego losowego wyniku kursu przy
random.seed(samedigit)
ponownym użyciu .źródło
Ustaw
seed(x)
przed wygenerowaniem zestawu liczb losowych i użyj tego samego ziarna do wygenerowania tego samego zestawu liczb losowych. Przydatne w przypadku odtwarzania wydań.źródło
Oto moje zrozumienie. Za każdym razem, gdy ustawiamy wartość początkową, generowana jest „etykieta” lub „odniesienie”. Następne wywołanie random.function jest przypisane do tej „etykiety”, więc następnym razem, gdy wywołasz tę samą wartość początkową i random.function, da ci ten sam wynik.
źródło
Oto mały test, który pokazuje, że podanie
seed()
metody tym samym argumentem spowoduje ten sam pseudolosowy wynik:źródło
len(set(l))<=1
random.seed(a, version)
w Pythonie służy do inicjalizacji generatora liczb pseudolosowych (PRNG) .PRNG to algorytm, który generuje ciąg liczb przybliżających właściwości liczb losowych. Te liczby losowe można odtworzyć za pomocą wartości początkowej . Tak więc, jeśli podasz wartość początkową, PRNG rozpocznie się od dowolnego stanu początkowego przy użyciu ziarna.
Argumentem
a
jest wartość początkowa. Jeśli wartością jestNone
, to domyślnie używany jest bieżący czas systemowy.i
version
jest liczbą całkowitą określającą sposób konwersji parametru a na liczbę całkowitą. Wartość domyślna to 2.Jeśli chcesz, aby ta sama liczba losowa została odtworzona, podaj ponownie to samo ziarno
Jeśli nie podasz ziarna, wygeneruje on inną liczbę, a nie 1, jak poprzednio
Jeśli podasz inne ziarno niż poprzednio , otrzymasz inną liczbę losową
Podsumowując, jeśli chcesz, aby ta sama liczba losowa została odtworzona, podaj ziarno. W szczególności to samo ziarno .
źródło