Curso
El módulo random de NumPy es un conjunto de funciones basadas en la generación de números seudoaleatorios. Aleatorio significa algo que no se puede predecir lógicamente.
np.random.seed() función
En este ejemplo vas a simular el lanzamiento de una moneda. Usarás la función np.random(), que extrae un número entre 0 y 1 de forma que todos los números de ese intervalo tienen la misma probabilidad de aparecer.
Si el número que obtienes es menor que 0.5, lo que tiene un 50% de probabilidad, dices cara; en caso contrario, cruz. Este tipo de experimento en el que el resultado es Verdadero (cara) o Falso (cruz) se conoce como ensayo de Bernoulli.
El generador de números seudoaleatorios funciona partiendo de un entero llamado semilla y generando números en sucesión. La misma semilla produce la misma secuencia de números aleatorios, de ahí lo de "seudo" aleatorio. Si quieres que tu código sea reproducible, conviene inicializar el generador con la función np.random.seed().
Para simular los lanzamientos, importas NumPy, fijas la semilla y luego generas cuatro números aleatorios. Puedes indicar cuántos quieres con el argumento 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])
El primer número es menor que 0.5, así que es cara, mientras que los otros tres son cruz. Puedes mostrarlo de forma explícita usando la operación "menor que", que te devuelve un array de valores booleanos: True para cara y False para cruz.
heads = random_numbers < 0.5
heads
array([True, False, False, False], dtype=bool)
Por último, puedes calcular cuántas caras han salido sumando el array booleano heads, porque en contexto numérico Python trata True como uno y False como cero.
np.sum(heads)
1
Simulación de cuatro lanzamientos aleatorios
En el siguiente ejemplo queremos saber la probabilidad de obtener cuatro caras si repitiéramos los cuatro lanzamientos una y otra vez. Podemos hacerlo con un bucle for.
Primero inicializamos el contador a cero. Luego repetimos 10.000 veces las pruebas de cuatro lanzamientos. Si en una prueba salen cuatro caras, incrementamos el contador.
Entonces, ¿cuál es la probabilidad de obtener cuatro caras? Es el número de veces que han salido todas caras dividido entre el número total de pruebas. El resultado es aproximadamente 0.06.
n_all_heads = 0
# Inicializa el número de pruebas con 4 caras
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
Ejemplo interactivo de generación de números aleatorios
En este ejemplo generaremos muchos números aleatorios entre cero y uno y luego representaremos un histograma con los resultados. Si los números son realmente aleatorios, todas las barras del histograma deberían tener una altura (aproximadamente) igual.
Para este ejemplo necesitas:
- Fijar la semilla del generador con
np.random.seedusando la semilla42. - Inicializar un array vacío, random_numbers, de 100.000 posiciones para guardar los
números aleatorios. Asegúrate de usarnp.empty(100000)para ello. - Escribir un bucle
forpara generar 100.000 números aleatorios connp.random.random(), almacenándolos en el arrayrandom_numbers. Para ello, itera sobrerange(100000). - Representar un histograma de
random_numbers. No es necesario etiquetar los ejes en este caso porque solo estamos comprobando el generador de números aleatorios.
# Fija la semilla del generador de números aleatorios
np.random.seed(42)
# Inicializa los números aleatorios: random_numbers
random_numbers = np.empty(100000)
# Genera números aleatorios iterando sobre range(100000)
for i in range(100000):
random_numbers[i] = np.random.random()
# Dibuja un histograma
_ = plt.hist(random_numbers)
# Muestra la gráfica
plt.show()
Al ejecutar el código anterior, se obtiene el siguiente resultado:

Para saber más sobre generadores de números aleatorios y hacker statistics, echa un vistazo a este vídeo de nuestro curso Statistical Thinking in Python (Part 1).
Este contenido está extraído del curso Statistical Thinking in Python (Part 1) de DataCamp, impartido por Justin Bois.