randrange(start, stop)
accetta solo argomenti interi. Quindi come posso ottenere un numero casuale tra due valori float?
randrange(start, stop)
accetta solo argomenti interi. Quindi come posso ottenere un numero casuale tra due valori float?
Risposte:
Usa 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
In altre parole, l'output N
può essere uguale a input a
e b
. In questo caso 1.5
e 1.9
.
.uniform
funzione, ma invece con uno dei due .random
o randrange
?
1.5 + random.random() * (1.9 - 1.5)
dovrebbe farlo, anche se secondo le specifiche questo non tornerà mai esattamente 1.9
(anche in teoria).
uniform(a, b)
implementato come a + (b-a) * random()
e restituisce un numero casuale nell'intervallo [a, b) o [a, b] a seconda dell'arrotondamento di github.com/python/cpython/blob/…
se vuoi generare un float casuale con N cifre a destra del punto, puoi farlo:
round(random.uniform(1,2), N)
il secondo argomento è il numero di decimali.
Più comunemente, useresti:
import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding
Python fornisce altre distribuzioni se necessario.
Se hai numpy
già importato, puoi usare il suo equivalente:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Ancora una volta, se hai bisogno di un'altra distribuzione, numpy
fornisce le stesse distribuzioni di Python, così come molte altre aggiuntive .
np.random.uniform(start, stop)
onp.random.uniform(start, stop, samples)
se volevi più campioni. Altrimenti le risposte di seguito sono le migliori.