Números flotantes aleatorios en Python

Publicado por Andrea Navarro en

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 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!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!

Categorías: Programación

Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora