Aleatoriedad y simulacion
Las simulaciones, tests y muestreos necesitan aleatoriedad reproducible. El generador moderno de NumPy es np.random.default_rng.
Generator recomendado
python
import numpy as np
rng = np.random.default_rng(42)
rng.random(5) # uniform [0, 1)
rng.normal(loc=0, scale=1, size=5)
rng.integers(0, 10, size=5)
rng.choice(["a", "b", "c"], size=5, replace=True)Evita el API legacy np.random.seed + funciones globales en codigo nuevo: es menos seguro con hilos y menos explicito.
Distribuciones utiles
python
rng.uniform(0, 10, size=(3, 3))
rng.binomial(n=10, p=0.3, size=1000)
rng.poisson(lam=4, size=1000)Permutaciones y shuffling
python
x = np.arange(10)
rng.shuffle(x) # in-place
y = rng.permutation(10) # nuevo arrayTrain/test split manual:
python
n = 100
idx = rng.permutation(n)
train_idx, test_idx = idx[:80], idx[80:]Simulacion Monte Carlo (ejemplo)
Estimar Pi:
python
rng = np.random.default_rng(0)
n = 1_000_000
pts = rng.random((n, 2))
inside = np.count_nonzero((pts ** 2).sum(axis=1) <= 1.0)
pi_hat = 4 * inside / n
print(pi_hat)Errores habituales
- Olvidar la semilla y no poder reproducir un bug.
- Usar la misma
rngcompartida en tests paralelos sin cuidado. sampleconreplace=Falsepidiendo mas elementos que la poblacion.
Buenas practicas
- Pasa
seedpor constructor de clases / CLI. - Un
rngpor experimento o por worker. - Documenta la semilla en resultados de notebooks.
Ejercicio
- Genera 10_000 muestras N(0,1) con semilla fija y comprueba media ~0.
- Simula 1000 tiradas de un dado justo y estima P(>=5).
- Haz un split 70/30 reproducible de un array de indices.
Siguiente paso
Continua con Rendimiento.
