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 < aEn otras palabras, la salida Npuede ser igual a la entrada ay b. En este caso 1.5y 1.9.
.uniformfunción, sino con cualquiera .randomo 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 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 .
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.