Moduł implementuje generatory liczb pseudolosowych o różnych rozkładach. Umożliwia wybór losowej liczby całkowitej z zadanego zakresu jak również losowego elementu z podanej sekwencji przy założeniu równomiernego rozkładu prawdopodobieństwa. Implementuje również funkcję generującą losową permutację listy, działającą w miejscu, oraz funkcję wybierającą losowe elementy listy bez zwracania.
Oferuje również funkcje do obliczania rozkładów: jednorodnego, normalnego (Gaussa), długiego normalnego, ujemnego wykładniczego, gamma i beta. W celu wygenerowania rozkładów dla kątów należy użyć rozkładu von Misesa.
Prawie wszystkie funkcje modułu korzystają z bazowej funkcji random(), która generuje zmiennoprzecinkowe liczby pseudolosowe z lewostronnie domkniętego przedziału [0.0, 1.0). Język Python używa generatora o nazwie Mersenne Twister, dzięki któremu możliwe jest uzyskanie liczb zmiennoprzecinkowych o 53-bitowej precyzji, przy czym okres tego generatora wynosi 2**19937-1. Implementacja w języku C, na której generator ów bazuje, jest szybka i bezpieczna ze względu na wątki. Mersenne Twister jest jednym z najszerzej badanych generatorów spośród wszystkich obecnie istniejących. Jednakże, ze względu na fakt, że jest on całkowicie deterministyczny, nie nadaje się do wszystkich celów, a w szczególności nie nadaje się do celów kryptograficznych.
Funkcje oferowane przez moduł są w rzeczywistości metodami dowiązanymi ukrytego egzemplarza klasy random.Random. Istnieje możliwość utworzenia własnych egzemplarzy klasy Random w celu uzyskania generatorów, które nie współdzielą swojego stanu. Jest ona szczególnie użyteczna w programach wielowątkowych, w których, w celu zapewnienia, że wygenerowane sekwencje widziane przez każdy z wątków nie nachodzą na siebie, tworzy się oddzielne instancje klasy Random dla każdego wątku, a następnie używa metody jumpahead().
Klasa Random może być klasą bazową dla innych klas, które mogą używać innego generatora. W takim przypadku należy nadpisać metody random(), seed(), getstate(), setstate() oraz jumpahead().
Jako przykład takiego dziedziczenia w module random zamieszczona została klasa WichmannHill która implementuje alternatywny generator w czystym języku Python. Klasa umożliwia odtworzenie działania generatora zgodne z wcześniejszymi wersjami języka Python,które jako generatora bazowego używały implementacji algorytmu Wichmanna-Hilla. Zmieniono w wersji 2.3: Substituted MersenneTwister for Wichmann-Hill.
Funkcje rejestrujące stan:
None, do inincjalizowania używany jest bieżący czas;
bieżący czas używany jest również wówczas, gdy moduł jest importowany po raz pierwszy. Jeżeli
x nie ma wartości None ani wartości całkowitoliczbowej, w zamian używana jest funkcja
hash(x). Jeżeli argument x ma wartość całkowitoliczbową, wartość ta używana
jest do zainicjalizowania w sposób bezpośredni.
Funkcje działające dla liczb całkowitych:
range(start,stop,krok).
Wywołanie metody równoważne jest wykonaniu następującego fragmentu kodu:
choice(range(start, stop, krok)), z tą różnicą, że
w przypadku wywołania metody randrange() nie jest tworzony obiekt zakresu.
Dodano w wersji 1.5.2.
a <= N <= b.
Functions for sequences:
Należy zauważyć, ze nawet dla małych wartości len(x),
całkowita liczba permutacji sekwencji x jest większa, niż cykl
większości generatorów liczb losowych. Oznacza to, że w przypadku
długich sekwencji większość permutacji nie zostanie wygenerowana.
Zwrócona lista zawiera elementy wybrane z przekazanej jako argument populacji, jednak oryginalna populacja pozostaje niezmieniona. Lista wynikowa zawiera elementy uporządkowane w kolejności wynikającej z kolejności losowania elementów z populacji, wobec czego wszystkie podlisty listy wynikowej można również traktować jako próbki losowe. Pozwala to na podzielenie zwycięzców loterii (próbka) na głównego zwycięzcę oraz zwycięzców drugiej nagrody (podlisty).
Elementy populacji nie muszą być elementami haszowalnymi (tj. umożliwiającymi wywołanie na nich funkcji skrótu) ani elementami unikatowymi. Jeżeli populacja zawiera powtórzenia, wówczas każde wystąpienie powtarzającej się wartości może zostać wybrane w wyniku losowania.
Aby wybrać próbkę z zakresu liczb całkowitych, jako argumentu należy użyć funkcji
xrange. W ten sposób uzyska się szybki i wydajny pamięciowo wybór próby
z dużej populacji: sample(xrange(10000000), 60).
Następujące funkcje generują specyficzne rozkłady zmiennych losowych o wartościach rzeczywistych. Nazwy parametrów funkcji pochodzą od nazw odpowiednich zmiennych w równaniach opisujących rozkład, co jest dość powszechną matematyczną praktyką. Większość spośród tych równań można odnaleźć w tekstach dotyczących statystyki.
The following functions generate specific real-valued distributions. Function parameters are named after the corresponding variables in the distribution's equation, as used in common mathematical practice; most of these equations can be found in any statistics text.
a <= N < b.
alpha > -1 i beta > -1.
Wartości zwracane należą do przedziału międzi 0 i 1.
średnia - kąt/2 i średnia +
kąt/2 oraz są znormalizowane do wartości między 0 i pi.
(średnia + kąt * (random.random() - 0.5)) % math.pi.
alpha > 0 i beta > 0.
Alternatywny generator
Zobacz też:
M. Matsumoto and T. Nishimura, ``Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator'', ACM Transactions on Modeling and Computer Simulation Vol. 8, No. 1, January pp.3-30 1998.
Wichmann, B. A. & Hill, I. D., ``Algorithm AS 183: An efficient and portable pseudo-random number generator'', Applied Statistics 31 (1982) 188-190.