Números flotantes aleatorios en Python
Este artículo veremos como utilizar el módulo random
de Python para generar números seudo-aleatorios e tipo punto flotante en diferentes distribuciones estadísticas.
Al generar números aleatorios de tipo punto flotante es posible especificar distintos tipos de distribuciones estadísticas. Los valores generados de manera aleatoria responderán a la distribución seleccionada con los parámetros configurados permitiendo emular diferentes situaciones o fenómenos.
Veamos ahora algunos ejemplos de distribuciones de probabilidad y sus respectivos códigos Python.
Aleatorio
La función random
devolverá el siguiente número de punto flotante en el rango 0.0 <= X < 1.0
. Este método tiene un rango semi-abierto, esto significa que aunque es posible que se genere el número 0
nunca se generará el número 1
.
import random
random.random()
0.012771255750201549
Distribución Uniforme
En este tipo de distribución todos los elementos tienen la misma probabilidad de aparecer. El método uniform requiere dos parámetros a y b que serán los rangos entre los que se encontrará el número aleatorio. El valor se encontrará en el rango a <= X < b
o b <= X < a
dependiendo de cuál valor sea menor.
import random
random.uniform(5,10)
A continuación se muestra el resultado de generar 1 millón de números aleatorios entre los valores 5 y 10 utilizando una distribución uniforme. Puede observarse como la tendencia es a tener la misma cantidad de elementos para cada valor.
Distribución Triangular
La distribución triangular requiere tres argumentos: low
y high
indican los extremos entre los que se encontrará el número generado low <= N <= high
. Si estos valores no son especificados sus valores por defecto son 0
y 1
respectivamente. Finalmente el argumento mode
indica la moda de la distribución, es decir, el valor con más probabilidad de ser generado.
El método triangular generará números aleatorios de forma que los valores más cercanos a los extremos y los más cercanos a la moda son los más probables generando de esta manera una distribución con forma triangular.
import random
random.triangular(5,10,6)
A continuación se muestra el resultado de generar 1 millón de números aleatorios entre los valores 5 y 10 con una moda de 6 utilizando una distribución triangular. Puede observarse como los valores más cercanos a 6 han sido generados con mucha más frecuencia que aquellos cercanos a los límites.
Distribución Beta
El método betavariate
retorna valores en el rango 0 <= N <= 1
y requiere el paso de los parámetros alpha(α) y beta(β)
, ambos números reales mayores a 0. Estos valores marcan la dirección y simetría de la distribución beta.
import random
random.betavariate(5,5)
A continuación se muestra el resultado de generar 1 millón de números aleatorios utilizando diferentes valores de α y β con una distribución beta.
Distribución Exponencial
El método expovariate
genera valores aleatorios en una distribución exponencial y requiere el argumento lambd
cuyo valor es 1.0 dividido por la media deseada. El rango de valores será 0 <= N <= ∞ si el valor de lambd
es positivo y -∞<= N <=0
si el valor es negativo.
import random
random.expovariate(0.5)
A continuación se muestra el resultado de generar 1 millón de números aleatorios utilizando una distribución exponencial. En el primer caso el valor de lambda
es 0.5
, es decir, 1/2
haciendo 2
el valor promedio e la distribución.
En este segundo ejemplo lambda
tiene el valor -0.25
haciendo el valor promedio de la distribución -4
.
Distribución Gamma
El método gammavariate
generará números aleatorios en una distribución Gamma. Al igual que la distribución Beta requiere los parámetros alpha(α) y beta(β)
cuyos valores deben ser mayores a 0. Los valores generados estarán en el rango 0 <= N <= ∞
.
import random
random.gammavariate(0.5)
A continuación se muestra el resultado de generar 1 millón de números aleatorios utilizando diferentes valores de α y β con una distribución gamma.
Distribución Gaussiana
El método gauss
generará un número aleatorio en una distribución Gaussiana o distribución normal. Los parámetros requeridos son mu(μ)
que será el valor promedio y sigma(σ)
que determinará la desviación estándar de la distribución. Si esto valores no son pasados tomaran los valores 0.0
y 1.0
respectivamente.
import random
random.gauss(0,5)
Una alternativa a este método es utilizar normalvariate
. Esta función utiliza los mismos parámetros pero su velocidad de ejecución es menor.
import random
random.normalvariate(0,5)
A continuación se muestra el resultado de generar 1 millón de números aleatorios utilizando una distribución Gaussiana con μ=10
y σ=5
. Puede observarse que la distribución tiene su punto de mayor probabilidad en 10
y la probabilidad disminuye dibujando una figura de campana.
Distribución normal logarítmica
El método lognormvariate
generará números aleatorios siguiendo una distribución normal logarítmica. Al igual que la distribución gaussiana requiere los parámetros mu(μ)
como valor promedio y sigma(σ)
como desviación estándar.
import random
random.lognormvariate(0.25,0.5)
A continuación se muestra el resultado de generar 1 millón de números aleatorios utilizando una distribución normal logarítmica con μ=0.25
y σ=0.5
.
Distribución de Von Mises
El método vonmisesvariate
generará números aleatorios siguiendo una distribución de Von Mises o distribución circular. Esta función requiere de dos parámetros: mu(μ)
que representa el ángulo medio cuyo valor debe encontrarse entre 0
y 2π
y kappa(κ)
que representa el parámetro de concentración y debe ser mayor o igual a 0
.
import random
random.vonmisesvariate(5,2)
A continuación se muestra el resultado de generar 1 millón de números aleatorios utilizando una distribución de Von Mises con μ=5
y
. κ
=2
Distribución Pareto
El método paretovariate
generará números aleatorios siguiendo una distribución de Pareto. Esta función requiere solo de un parámetro alpha
(α)
que es el parámetro de forma.
import random
random.paretovariate(20)
A continuación se muestra el resultado de generar 1 millón de números aleatorios utilizando una distribución de Pareto con α
=20
.
Distribucción Weibull
El método weibullvariate
generará números aleatorios siguiendo una distribución de Weibull. Esta función requiere los parámetros alpha(α)
y beta(β)
siendo el primero la escala y el segundo la forma.
import random
random.weibullvariate(1,0.5)
A continuación se muestra el resultado de generar 1 millón de números aleatorios utilizando una distribución de Weibull con α=1
y β=0.5
.
En este artículo hemos visto los métodos que nos permiten generar números aleatorios flotantes en diferentes distribuciones estadísticas en Python utilizando el módulo random
.
Espero que les sea de utilidad!