Libreria casuale | Genera numeri casuali in Python

Contenuti

Il mondo è governato dal caso. La casualità ci perseguita ogni giorno della nostra vita.

– Paolo Auster

Numeri casuali ci circondano nel mondo della scienza dei dati. Ogni tanto ho bisogno di trovare rapidamente dei numeri casuali per eseguire un esperimento mentale o per dimostrare un concetto a un pubblico., ma senza dover scaricare grandi set di dati.

Dalla creazione di dati fittizi alla riproduzione casuale dei dati per scopi di addestramento e test o l'inizializzazione dei pesi di una rete neurale, generiamo sempre numeri casuali in Python. Amerai questo concetto una volta che ci avrai preso la mano dopo questo articolo.

feature_image-1-6854131

Secondo me, La generazione di numeri casuali è un argomento che chiunque nella scienza dei dati dovrebbe conoscere. Ti guiderò attraverso l'intero processo di generazione di numeri casuali in Python qui e lo dimostrerò anche usando tecniche diverse.

Nuovo in Python? Questi due corsi gratuiti ti faranno iniziare:

Sommario

  • Libreria casuale
  • Semina numeri casuali
  • Generazione di numeri casuali in un intervallo
  • Prendendo a caso da una lista
  • Mescolare una lista
  • Generazione di numeri casuali secondo distribuzioni

Generazione di numeri casuali in Python usando la libreria casuale

Questa è la buona notizia: ci sono diversi modi per generare numeri casuali in Python. Il metodo più semplice è usare a caso modulo. È un modulo integrato in Python e non richiede installazione. Questo modulo utilizza a generatore di numeri pseudo-casuali (PRNG) conosciuto come Mersenne Twister per generare numeri casuali.

Un generatore di numeri pseudo-casuali è un generatore di numeri casuali deterministico. Non genera numeri veramente casuali. Prendi un numero come input e genera un numero casuale per esso.

Nota: Non usare il a caso modulo per generare numeri casuali per motivi di sicurezza. Per usi crittografici e di sicurezza, puoi usare il misteri modulo che usi veri generatori di numeri casuali (BIANCO).

Semina numeri casuali

Come abbiamo discusso nella sezione precedente, il modulo random prende un numero come input e genera un numero casuale per esso. Questo valore iniziale è noto come seme e la procedura è nota come seme..

I numeri che generiamo utilizzando generatori di numeri pseudo-casuali sono deterministici. Ciò significa che possono essere replicati utilizzando lo stesso seme..

Capiamo con un esempio:

importa casuale

Stampa('Numero casuale 1=>',random.random())
Stampa('Numero casuale 2=>',random.random())

Qui, sto usando la funzione casuale () che genera un numero casuale nell'intervallo [0.0, 1.0]. Nota qui che non ho menzionato il valore del seme. Per impostazione predefinita, il tempo di sistema corrente in millisecondi viene utilizzato come seme. Diamo un'occhiata all'output.

rn1-8128994

Entrambi i numeri sono diversi a causa del cambiamento di tempo durante l'esecuzione dalla prima alla seconda istruzione. Vediamo cosa succede se piantiamo i generatori con lo stesso valore:

random.seed(42)
Stampa('Numero casuale 1=>',random.random())

random.seed(42)
Stampa('Numero casuale 2=>',random.random())

rn2-2933479

Otteniamo gli stessi numeri qui. Questo è il motivo per cui i generatori di numeri pseudo-casuali sono deterministici e non utilizzati per motivi di sicurezza perché chiunque abbia il seme può generare lo stesso numero casuale.

Generazione di numeri casuali in un intervallo

Fino ad ora, sappiamo come creare numeri casuali nell'intervallo [0.0, 1.0]. Ma, E se dovessimo creare un numero in un intervallo diverso da questo??

Un modo è moltiplicare e aggiungere numeri al numero restituito da a caso() funzione. Ad esempio, random.random () * 3 + 2 restituirà i numeri nell'intervallo [2.0, 5.0]. tuttavia, questa è più una soluzione alternativa, non una soluzione diretta.

Non preoccuparti! Il modulo casuale ti dà le spalle. Fornisce uniforme() e datazione () funzioni che possiamo usare per questo scopo. Capiamo uno per uno.

uniforme()

La funzione uniforme () del modulo casuale prende i valori di inizio e fine di un intervallo come argomenti e restituisce un numero in virgola mobile casuale nell'intervallo. [di partenza, fine]:

Stampa("Numero casuale nell'intervallo"(2,8)=>', random.uniform(2,8))

rn3-9890086

datazione ()

Questa funzione è simile alla funzione uniforme (). L'unica differenza è che la funzione uniforme () restituisce numeri casuali in virgola mobile e la funzione randint () restituisce un numero intero. Restituisce anche il numero nell'intervallo [di partenza, fine]:

Stampa("Numero casuale in un intervallo"(2,8)=>', random.randint(2,8))

rn4-9834899

Prendendo a caso da una lista

scelta() E opzioni () sono le due funzioni fornite dal modulo random che possiamo utilizzare per selezionare casualmente valori da una lista. Entrambe le funzioni prendono una lista come argomento e selezionano casualmente un valore da essa. Riesci a indovinare qual è la differenza tra scelta() e opzioni () è?

scelta() basta scegliere un singolo valore da un elenco, mentre opzioni () scegli più valori da un elenco con sostituzione. Una cosa grandiosa di queste funzioni è che funzionano anche su un elenco che contiene stringhe. Vediamoli in azione:

a=[5, 9, 20, 10, 2, 8]
Stampa('Numero scelto a caso=>',random.choice(un))
Stampa('Numero scelto a caso=>',scelte.casuali(un,k=3))

rn5-5845800

Come potete vedere, scelta() restituito un valore univoco di un e opzioni () restituito tre valori di un. Qui, K è la lunghezza della lista restituita da opzioni ().

Un'altra cosa che potresti notare nelle risposte restituite da opzioni () è che ogni valore si verifica solo una volta. Puoi aumentare la probabilità che ogni valore venga scelto passando un array come pesos al opzioni () funzione. Quindi, aumentiamo la probabilità di 10 fino a altre tre volte e vediamo i risultati:

per _ nell'intervallo(5):
   Stampa('Numero scelto a caso=>',scelte.casuali(un,pesi=[1,1,1,3,1,1],k=3))

rn6-6712715

Qui, possiamo vedere cosa è successo 10 in ogni sorteggio della lista. C'è anche un Spettacoli() funzione in un modulo casuale che funziona in modo simile a opzioni () funzione ma prende campioni casuali da un elenco nessuna sostituzione.

Mescolare una lista

Diciamo che non vogliamo selezionare valori da un elenco, vogliamo solo riordinarli. Possiamo farlo usando il mescola() funzione modulo casuale. Questo mescola() La funzione prende l'elenco come argomento e mescola invece l'elenco:

Stampa('Elenco originale=>',un)
random.shuffle(un)
Stampa('Lista mischiata=>',un)

rn7-2325520

Nota: la funzione casuale () non restituisce un elenco.

Generazione di numeri casuali secondo distribuzioni

Una caratteristica più sorprendente del modulo random è che ci permette di generare numeri casuali basati su diverse distribuzioni di probabilità. Ci sono varie funzioni come Gauss(), expovariate (), eccetera., che ci aiutano a farlo.

Se non hai familiarità con le distribuzioni di probabilità, Ti consiglio di leggere questo articolo: 6 Distribuzioni di probabilità comuni che ogni professionista della scienza dei dati dovrebbe conoscere.

Gauss()

Iniziamo con la distribuzione di probabilità più comune, vale a dire, distribuzione normale. Gauss() è una funzione del modulo casuale utilizzato per generare numeri casuali secondo una distribuzione normale. Prendi la media e la deviazione standard come argomento e restituisci un numero casuale:

per _ nell'intervallo(5):
   Stampa(random.gauss(0,1))

rn8-2090763

rn10-1757635

Qui, traccia 1000 numeri casuali generati da Gauss() funzione per media uguale a 0 e deviazione standard come 1. Puoi vedere sopra che tutti i punti sono distribuiti attorno alla media e non ampiamente distribuiti poiché la deviazione standard è 1.

expovariate ()

La distribuzione esponenziale è un'altra distribuzione di probabilità molto comune che troverai. il expovariate () La funzione viene utilizzata per ottenere un numero casuale secondo la distribuzione esponenziale. Prende il valore di lambda come argomento e restituisce un valore di 0 all'infinito positivo se lambda è positivo, e da infinito negativo a 0 se lambda è negativo:

Stampa('Numero casuale da distribuzione esponenziale=>',random.expovariate(10))

rn9-7677609

Note finali

Uso spesso numeri casuali per creare set di dati fittizi e per il campionamento casuale. Mi piacerebbe sapere come usi i numeri casuali nei tuoi progetti, quindi commenta qui sotto con i tuoi pensieri e condividili con la community.

Se hai trovato questo articolo informativo, Condividilo con i tuoi amici e commenta qui sotto le tue domande e i tuoi commenti. Di seguito ho elencato alcuni fantastici articoli relativi a Python e alla scienza dei dati come riferimento:

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.