¿Cómo obtener un número aleatorio entre un rango flotante?


414

randrange(start, stop)solo toma argumentos enteros. Entonces, ¿cómo obtendría un número aleatorio entre dos valores flotantes?


2
Si quería numpy es np.random.uniform(start, stop)o np.random.uniform(start, stop, samples)si quería múltiples muestras. De lo contrario, las respuestas a continuación son las mejores.
sachinruk

Respuestas:


650

Utilice random.uniform (a, b) :

>>> random.uniform(1.5, 1.9)
1.8733202628557872

44
¿Podría esto teóricamente producir 1.5 y 1.9? ¿O solo produciría 1.50 ~ 1 y 1.89 ~?
Musixauce3000

14
@ Musixauce3000 Respuesta corta: Sí. Respuesta más larga: si observa la documentación que indica Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < aEn otras palabras, la salida Npuede ser igual a la entrada ay b. En este caso 1.5y 1.9.
Dan

¿Hay otra forma de hacer esto sin usar la .uniformfunción, sino con cualquiera .randomo randrange?
DerryckDX

1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)debería hacerlo, aunque de acuerdo con las especificaciones, esto nunca volverá exactamente 1.9(incluso en teoría).
Yonatan N

@ Musixauce3000 parece uniform(a, b)implementado como a + (b-a) * random()y devuelve un número aleatorio en el rango [a, b) o [a, b] dependiendo del redondeo github.com/python/cpython/blob/…
Pavel

74

random.uniform(a, b)parece ser lo que estás buscando. De los documentos:

Devuelve un número aleatorio de coma flotante N tal que a <= N <= b para a <= by b <= N <= a para b <a.

Ver aquí .


47

si desea generar un flotante aleatorio con N dígitos a la derecha del punto, puede hacer esto:

round(random.uniform(1,2), N)

El segundo argumento es el número de decimales.


No sé por qué esto no tiene más votos a favor, los otros no tenían el mecanismo de redondeo.
TheTechRobo36414519

2

Más comúnmente, usarías:

import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding

Python proporciona otras distribuciones si lo necesita.

Si ya ha numpyimportado, puede usar su equivalente:

import numpy as np
np.random.uniform(a, b) # range [a, b)

Nuevamente, si necesita otra distribución, numpyproporciona las mismas distribuciones que python, así como muchas más .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.