randrange(start, stop)
solo toma argumentos enteros. Entonces, ¿cómo obtendría un número aleatorio entre dos valores flotantes?
randrange(start, stop)
solo toma argumentos enteros. Entonces, ¿cómo obtendría un número aleatorio entre dos valores flotantes?
Respuestas:
Utilice random.uniform (a, b) :
>>> random.uniform(1.5, 1.9)
1.8733202628557872
Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < a
En otras palabras, la salida N
puede ser igual a la entrada a
y b
. En este caso 1.5
y 1.9
.
.uniform
función, sino con cualquiera .random
o randrange
?
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).
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/…
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.
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 numpy
importado, puede usar su equivalente:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Nuevamente, si necesita otra distribución, numpy
proporciona las mismas distribuciones que python, así como muchas más .
np.random.uniform(start, stop)
onp.random.uniform(start, stop, samples)
si quería múltiples muestras. De lo contrario, las respuestas a continuación son las mejores.