Dokonałeś już wielu poprawnych obserwacji!
O ile nie chcesz wysiewać obu losowych generatorów, na dłuższą metę prawdopodobnie łatwiej będzie wybrać jeden lub drugi generator. Ale jeśli musisz użyć obu, to tak, musisz również zasiać oba, ponieważ generują liczby losowe niezależnie od siebie.
Ponieważ numpy.random.seed()
główna trudność polega na tym, że nie jest bezpieczny dla wątków - to znaczy, że nie jest bezpieczny w użyciu, jeśli masz wiele różnych wątków wykonania , ponieważ nie ma gwarancji, że zadziała, jeśli dwa różne wątki wykonują funkcję w tym samym czasie. Jeśli nie używasz wątków i możesz rozsądnie oczekiwać, że nie będziesz musiał przepisywać swojego programu w ten sposób w przyszłości, numpy.random.seed()
powinno być dobrze. Jeśli istnieje jakikolwiek powód, by podejrzewać, że możesz potrzebować wątków w przyszłości, na dłuższą metę znacznie bezpieczniej jest postępować zgodnie z sugestią i utworzyć lokalną instancję numpy.random.Random
klasy . O ile wiem, random.random.seed()
jest bezpieczny dla wątków (a przynajmniej nie znalazłem żadnych dowodów przeciwnych).
numpy.random
Biblioteka zawiera kilka dodatkowych rozkładów prawdopodobieństwa powszechnie wykorzystywane w badaniach naukowych, a także kilka funkcji wygoda dla generowania tablic losowych danych. random.random
Biblioteka jest trochę bardziej lekki i powinno być w porządku, jeśli nie robisz badań naukowych lub innych rodzajów prac w statystykach.
W przeciwnym razie obaj używają sekwencji twistera Mersenne'a do generowania swoich liczb losowych i oba są całkowicie deterministyczne - to znaczy, jeśli znasz kilka kluczowych informacji, można z absolutną pewnością przewidzieć, jaka liczba będzie następna . Z tego powodu ani numpy.random, ani random.random nie nadają się do poważnych zastosowań kryptograficznych . Ale ponieważ sekwencja jest tak bardzo długa, obie są dobre do generowania liczb losowych w przypadkach, gdy nie martwisz się, że ludzie próbują odtworzyć twoje dane. Stąd też konieczność zasiania losowej wartości - jeśli zaczniesz za każdym razem w tym samym miejscu, zawsze otrzymasz tę samą sekwencję liczb losowych!
Na marginesie, jeśli nie potrzebujemy poziom losowości kryptograficznych, należy użyć tajemnice moduł lub coś podobnego Crypto.Random jeśli używasz wersji Pythona wcześniej niż Python 3.6.
random.random
samodzielnie. Jednak zwykle tego nie potrzebujesz.