9. Números aleatorios y simulaciones

NumPy ofrece el submódulo numpy.random, con el que podemos generar números aleatorios simples, arrays completos y muestras de distribuciones estadísticas muy utilizadas.

9.1 Generación de números aleatorios (np.random)

Existen múltiples formas de generar números aleatorios:

a) Un número aleatorio entre 0 y 1 (random.rand)

import numpy as np

print("Número aleatorio [0,1):", np.random.rand())

b) Array de números aleatorios (rand)

print("Array 1D:", np.random.rand(5))        # 5 números aleatorios
print("Matriz 2D:\n", np.random.rand(2, 3))  # Matriz 2x3

c) Enteros aleatorios (randint)

print("Enteros aleatorios:", np.random.randint(1, 10, size=5))  
# 5 números entre 1 y 9

9.2 Distribuciones comunes

NumPy permite simular distribuciones estadísticas.

a) Distribución uniforme (np.random.uniform)

Genera valores entre un rango [a, b) con probabilidad uniforme.

arr = np.random.uniform(0, 10, size=5)
print("Distribución uniforme [0,10):", arr)

b) Distribución normal o gaussiana (np.random.normal)

Muy utilizada en estadística y machine learning.

arr = np.random.normal(loc=0, scale=1, size=10)
print("Distribución normal (media=0, std=1):", arr)

👉 loc es la media; scale, la desviación estándar.

c) Distribución binomial (np.random.binomial)

Se usa para experimentos “sí/no” (Bernoulli).

# Simulación: 10 experimentos, probabilidad de éxito 0.5, repetido 5 veces
arr = np.random.binomial(n=10, p=0.5, size=5)
print("Distribución binomial:", arr)

👉 Ejemplo típico: lanzar una moneda 10 veces y contar cuántas veces salió cara.

9.3 Fijar semillas (np.random.seed)

Sin semilla, cada ejecución produce valores distintos. Para reproducir resultados, fijamos una semilla.

np.random.seed(42)

print("Con semilla fija:", np.random.randint(1, 100, 5))

Salida (repetible):

Con semilla fija: [52 93 15 72 61]

👉 Es clave para experimentar y comparar modelos de forma justa.

Resumen

  • np.random.rand(): números aleatorios en [0,1).
  • np.random.randint(a, b, size): enteros aleatorios.
  • np.random.uniform(a, b, size): distribución uniforme.
  • np.random.normal(media, std, size): distribución normal.
  • np.random.binomial(n, p, size): distribución binomial.
  • np.random.seed(valor): fija la semilla para reproducibilidad.

Nota: Estas herramientas permiten crear simulaciones, experimentos y pruebas controladas en proyectos de ciencia de datos.