Come ottenere un numero casuale tra un intervallo float?


414

randrange(start, stop)accetta solo argomenti interi. Quindi come posso ottenere un numero casuale tra due valori float?


2
Se volevi numpy è np.random.uniform(start, stop)o np.random.uniform(start, stop, samples)se volevi più campioni. Altrimenti le risposte di seguito sono le migliori.
Sachinruk,

Risposte:


650

Usa random.uniform (a, b) :

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

4
questo potrebbe teoricamente produrre 1.5 e 1.9? o produrrebbe solo 1,50 ~ 1 e 1,89 ~?
Musixauce3000,

14
@ Musixauce3000 Risposta breve: Sì. Risposta più lunga: se guardi la documentazione che afferma Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < aIn altre parole, l'output Npuò essere uguale a input ae b. In questo caso 1.5e 1.9.
Dan

C'è un altro modo per farlo senza usare la .uniformfunzione, ma invece con uno dei due .randomo randrange?
DerryckDX

1
@DerryckDX 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).
Yonatan N

@ Musixauce3000 sembra 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/…
Pavel

74

random.uniform(a, b)sembra essere quello che stai cercando. Dai documenti:

Restituisce un numero a virgola mobile casuale N tale che a <= N <= b per a <= b e b <= N <= a per b <a.

Vedi qui .


47

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.


Non so perché questo non abbia più voti, gli altri non avevano il meccanismo di arrotondamento.
TheTechRobo36414519

2

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 numpygià 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, numpyfornisce le stesse distribuzioni di Python, così come molte altre aggiuntive .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.