Questo modulo implementa generatori di numeri pseudo casuali per varie distribuzioni.
Per numeri interi, la selezione avviene uniformemente da un intervallo. Per le sequenze, si seleziona uniformemente un elemento casuale, vengono fornite anche una funzione per generare una permutazione casuale sul posto di una lista ed una funzione per la campionatura casuale senza sostituzione.
Nel campo dei numeri reali, esistono funzioni per calcolare distribuzioni uniformi, normali (gaussiane), normali logaritmiche, esponenziali negative, gamma e beta. Per generare distribuzioni di angoli, è disponibile la distribuzione von Mises.
Quasi tutte le funzioni di questo modulo dipendono dalla funzione fondamentale random(), che genera uniformemente un numero in virgola mobile casuale nell'intervallo semi aperto [0.0; 1.0]. Python utilizza il Mersenne Twister come generatore principale. Esso produce numeri in virgola mobile con la precisione di 53 bit e dispone di un periodo di 2**19937-1. L'implementazione sottostante in C è sia veloce che sicura per i thread. Il Mersenne Twister è uno dei generatori di numeri casuali esistente più testati. Nonostante ciò, essendo completamente deterministico, non è adatto a tutti gli usi, ed è del tutto inutilizzabile per scopi crittografici.
Le funzioni fornite da questo modulo sono in realtà metodi legati ad un'istanza nascosta della classe random.Random. Potete creare le vostre istanze personali di Random per ottenere generatori indipendenti. Questo è utile soprattutto per programmi multi thread, creando differenti istanze di Random per ogni thread e usando il metodo jumpahead() si assicura che le sequenze generate in ogni thread non si sovrappongano.
Dalla classe Random si possono anche derivare delle sotto classi, nel caso in cui vogliate utilizzare per i vostri scopi un generatore di base differente: in quel caso, ridefinite i metodi random(), seed(), getstate(), setstate() e jumpahead(). Facoltativamente, un nuovo generatore può sostituire il metodo getrandombits() -- questo permette a randrange() di produrre selezioni in una sequenza arbitrariamente grande. Nuovo nella versione 2.4: il metodo getrandombits().
Come esempio di derivazione, il modulo random fornisce la classe WichmannHill che implementa un generatore alternativo in puro Python. La classe fornisce un modo retrocompatibile per riprodurre i risultati delle vecchie versioni di Python che usavano l'algoritmo Wichmann-Hill come generatore principale. Modificato nella versione 2.3: Sostituito Wichmann-Hill con MersenneTwister.
Funzioni di calcolo:
[x]) |
None
, si utilizza il tempo di
sistema corrente; il tempo di sistema corrente viene usato anche per
inizializzare il generatore quando si importa il modulo per la
prima volta. Se l'argomento non è ne None
ne un int e neppure un long,
viene utilizzato hash(x)
. Se x è un int o un long, si usa
direttamente x.
) |
state) |
n) |
k) |
Funzioni per gli interi:
[start,] stop[, step]) |
range(start, stop, step)
. È equivalente a
choice(range(start, stop, step))
, ma non
costruisce un oggetto range.
Nuovo nella versione 1.5.2.
a, b) |
a <= N <= b
.
Funzioni per le sequenze:
seq) |
x[, random]) |
Notate che anche per len(x)
piuttosto piccolo, il
numero totale di permutazioni di x è più grande del periodo
della maggior parte dei generatori di numeri casuali; questo implica
che la maggior parte delle permutazioni di una lunga sequenza non
potrà mai essere generata.
population, k) |
Restituisce una nuova lista contenente elementi presi da population lasciando immutata la population originale. La lista ottenuta viene restituita in ordine di selezione così che ogni sotto lista sia un campionamento casuale valido. Questo permette di individuare tra i vincitori (il campionamento) il primo ed i secondi posti (le sotto liste).
Non è necessario che gli elementi di population siano utilizzabili da hash o che siano elementi distinti. Se population contiene elementi ripetuti, ogni occorrenza è una possibile selezione del campione.
Per scegliere un campione da un intervallo di interi, usate
xrange come argomento. Questo è un metodo
particolarmente veloce ed economico per la memoria
di ottenere un campione da un'ampia popolazione:
sample(xrange(10000000), 60)
.
Le seguenti funzioni generano specifiche distribuzioni di numeri reali. I parametri delle funzioni vengono ricalcati in base ai nomi delle variabili corrispondenti nelle equazioni delle distribuzioni, come si usa nella comune terminologia matematica; la maggior parte di queste equazioni si possono trovare in un qualunque testo di statistica.
) |
a, b) |
a <= N < b
.
alpha, beta) |
alpha > -1
e beta > -1
. I valori restituiti
si trovano nell'intervallo fra 0 e 1.
lambd) |
alpha, beta) |
alpha > 0
e
beta > 0
.
mu, sigma) |
mu, sigma) |
mu, sigma) |
mu, kappa) |
alpha) |
alpha, beta) |
Generatori alternativi
[seed]) |
[x]) |
Vedete anche:
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.