Quiero ejecutar una simulación que use como parámetro un valor generado a partir de una distribución de probabilidad triangular con un límite inferior A, modo B y un límite superior C. ¿Cómo puedo generar este valor en Python? ¿Hay algo tan simple como expovariate (lambda) (del azar) para esta distribución o tengo que codificar esto?Python, SimPy: ¿Cómo generar un valor a partir de una distribución de probabilidad triangular?
Respuesta
Si descarga el paquete NumPy, tiene una función numpy.random.triangular (izquierda, modo, derecha [, tamaño]) que hace exactamente lo que está buscando.
Puesto que, yo era la documentación de azar de Python 2.4 echaba de menos esta:
random.triangular (baja, alta, de modo) ¶ devolver un número aleatorio de punto flotante N tal que bajo < = N < = alto y con el modo especificado entre esos límites. Los límites bajo y alto por defecto son cero y uno. El argumento de modo se establece de manera predeterminada en el punto medio entre los límites, dando una distribución simétrica. Nuevo en la versión 2.6.
Digamos que su distribución no fue manejada por NumPy o la biblioteca estándar de Python.
En situaciones donde el rendimiento no es muy importante, el muestreo de rechazo es un truco útil para obtener sorteos de una distribución que no tiene utilizando una que sí tiene.
Para su distribución triangular, que podría hacer algo como
from random import random, uniform
def random_triangular(low, high, mode):
while True:
proposal = uniform(low, high)
if proposal < mode:
acceptance_prob = (proposal - low)/(mode - low)
else:
acceptance_prob = (high - proposal)/(high - mode)
if random() < acceptance_prob: break
return proposal
Puede representar algunas muestras
pylab.hist([random_triangular(1, 6, 5) for t in range(10000)])
para asegurarse de que todo se ve bien.
¡Sugerencia agradable para propósitos generales! para OP, la idea aquí es relacionar el uniforme con la densidad de la distribución deseada. –
- 1. Generación de una distribución de probabilidad
- 2. ¿Cómo generar un número aleatorio a partir de la distribución discreta especificada?
- 3. Algoritmo para generar una malla triangular a partir de una nube de puntos
- 4. Distribución de probabilidad para retrasos de respuesta de sms
- 5. C#: Algoritmo numérico para generar números a partir de la distribución Binomial
- 6. ¿Cómo puedo generar una secuencia a partir de una cadena?
- 7. Calculando probabilidad de una variable aleatoria en una distribución en Python
- 8. Cómo devolver un valor Enum a partir de una cadena?
- 9. Asignación de un número específico de valores informados por una distribución de probabilidad (en R)
- 10. Volviendo un valor aleatorio de matriz con probabilidad proporcional a su valor
- 11. Distribución de probabilidad de números aleatorios hacia adelante
- 12. verificando una distribución de probabilidad con sumas variables de argumentos a 1
- 13. Generar servicio web a partir de WSDL
- 14. Generar un WSDL a partir de un archivo XSD
- 15. Generar paleta de colores a partir de una imagen
- 16. Generar clases de Java a partir de archivos .XSD ...?
- 17. Generar una frase pseudonatural a partir de un entero grande de forma reversible
- 18. Buscar vértices únicos de una 'sopa triangular'
- 19. ¿Cómo puedo trazar la estimación de máxima probabilidad en Python?
- 20. Generar una imagen de forma de onda a partir de un archivo de audio
- 21. Mejorar el código para generar una distribución
- 22. Python Subprocess.Popen a partir de un hilo
- 23. Distribución exponencial en Python
- 24. Cómo generar valor aleatorio negativo en python
- 25. cómo muestrear numéricamente desde una función de distribución de probabilidad común, discreta
- 26. ¿Generar un gráfico con cierta distribución de grados?
- 27. C++: generar distribución gaussiana
- 28. ¿Qué herramientas accesibles de Python puede usar para generar XSD a partir de un documento XML?
- 29. En Python, ¿cómo puedo generar fácilmente un archivo de imagen a partir de algunos datos de origen?
- 30. Cómo generar XSLT a partir de muestras XML
Esta es probablemente una mejor respuesta que la aceptada para la mayoría de los casos de uso. ¡Es un poco molesto que la API tenga un orden diferente al de NumPy! –