{count, plural, one {Corso} other {Corsi}}
Il modulo random di NumPy è una suite di funzioni basate sulla generazione di numeri pseudocasuali. Casuale significa qualcosa che non può essere previsto logicamente.
np.random.seed() Function
In questo esempio simulerai il lancio di una moneta. Userai la funzione np.random(), che estrae un numero tra 0 e 1 in modo che tutti i numeri in questo intervallo abbiano la stessa probabilità di comparire.
Se il numero estratto è minore di 0,5, evento che ha una probabilità del 50%, dici testa, altrimenti croce. Questo tipo di esperimento in cui l’esito è True (testa) o False (croce) è chiamato prova di Bernoulli.
Il generatore di numeri pseudocasuali funziona partendo da un intero detto seed (seme) e genera poi numeri in successione. Lo stesso seed produce la stessa sequenza di numeri casuali, da qui il nome "pseudo" generazione di numeri casuali. Se vuoi avere codice riproducibile, è buona pratica inizializzare il generatore con la funzione np.random.seed().
Per fare i lanci di moneta, importi NumPy, imposti il seed del generatore e poi estrai quattro numeri casuali. Puoi specificare quanti numeri casuali vuoi con il parametro size.
import numpy as np
np.random.seed(42)
random_numbers = np.random.random(size=4)
random_numbers
array([0.3745012, 0.95071431, 0.73199394, 0.59865848])
Il primo numero che ottieni è minore di 0,5, quindi è testa, mentre i restanti tre sono croce. Puoi mostrarlo esplicitamente usando l’operatore "minore di", che restituisce un’array con valori booleani, True per testa e False per croce.
heads = random_numbers < 0.5
heads
array([True, False, False, False], dtype=bool)
Infine, puoi calcolare il numero di teste sommando l’array booleano heads, perché in contesto numerico Python tratta True come uno e False come zero.
np.sum(heads)
1
Simulazione di quattro lanci di moneta casuali
Nel seguente esempio, vogliamo conoscere la probabilità di ottenere quattro teste se ripetessimo i quattro lanci della moneta più e più volte. Possiamo farlo con un ciclo for.
Per prima cosa inizializziamo il contatore a zero. Quindi ripetiamo 10.000 prove di quattro lanci. Se una determinata prova ha dato quattro teste, incrementiamo il contatore.
Qual è quindi la probabilità di ottenere quattro teste? È il numero di volte in cui hai ottenuto tutte teste, diviso per il numero totale di prove. Il risultato è circa 0,06.
n_all_heads = 0
# Initialize number of 4-heads trials
for _ in range(10000):
heads = np.random.random(size=4) < 0.5
n_heads = np.sum(heads)
if n_heads == 4:
n_all_heads += 1
n_all_heads / 10000
0.0621
Esempio interattivo di generazione di numeri casuali
In questo esempio genereremo molti numeri casuali tra zero e uno e poi tracceremo un istogramma dei risultati. Se i numeri sono davvero casuali, tutte le barre dell’istogramma dovrebbero avere altezza (quasi) uguale.
Per questo esempio dovrai:
- Inizializzare il generatore di numeri casuali con
np.random.seedusando il seed42. - Inizializzare un array vuoto, random_numbers, di 100.000 elementi per memorizzare i
numeri casuali. Assicurati di usarenp.empty(100000)per farlo. - Scrivere un ciclo
forper estrarre 100.000 numeri casuali usandonp.random.random(), memorizzandoli nell’arrayrandom_numbers. Per farlo, itera surange(100000). - Tracciare un istogramma di
random_numbers. Non è necessario etichettare gli assi in questo caso perché stiamo solo verificando il generatore di numeri casuali.
# Seed the random number generator
np.random.seed(42)
# Initialize random numbers: random_numbers
random_numbers = np.empty(100000)
# Generate random numbers by looping over range(100000)
for i in range(100000):
random_numbers[i] = np.random.random()
# Plot a histogram
_ = plt.hist(random_numbers)
# Show the plot
plt.show()
Quando eseguiamo il codice sopra, otteniamo il seguente risultato:

Per saperne di più sui generatori di numeri casuali e sull’hacker statistics, guarda questo video dal nostro corso Pensiero statistico in Python (Parte 1).
Questo contenuto è tratto dal corso di DataCamp Pensiero statistico in Python (Parte 1) di Justin Bois.

