web-dev-qa-db-fra.com

En python, quelle est la différence entre random.uniform () et random.random ()?

En python pour le module random, quelle est la différence entre random.uniform() et random.random()? Ils génèrent tous deux des nombres pseudo-aléatoires, random.uniform() génère des nombres à partir d'une distribution uniforme et random.random() génère le nombre aléatoire suivant. Quelle est la différence? 

20
NKCP

random.random() vous donne un nombre à virgule flottante aléatoire dans la plage [0.0, 1.0) (incluant donc 0.0, mais non plus 1.0 qui est également connu sous le nom de plage semi-ouverte). random.uniform(a, b) vous donne un nombre à virgule flottante aléatoire dans la plage [a, b] (où l'arrondi peut vous donner b).

La implémentation de random.uniform() utilise random.random() directement:

def uniform(self, a, b):
    "Get a random number in the range [a, b) or [a, b] depending on rounding."
    return a + (b-a) * self.random()

random.uniform(0, 1) est fondamentalement la même chose que random.random() (car 1.0 fois valeur float la plus proche de 1.0 vous donnera toujours la valeur float la plus proche de 1.0 il n'y a aucune possibilité d'arrondi ici).

31
Martijn Pieters

Dans random.random ()  la sortie est comprise entre 0 et 1, et il ne prend aucun paramètre d'entrée

Tandis que random.uniform () prend des paramètres, dans lesquels vous pouvez soumettre la plage du nombre aléatoire .
import random as ra print ra.random() print ra.uniform(5,10)

SORTIE:-
0.672485369423 7.9237539416

4
Saurabh Adhikary

La différence est dans les arguments. Il est très courant de générer un nombre aléatoire à partir d'une distribution uniforme dans l'intervalle [0.0, 1.0), donc random.random() ne fait que cela. Utilisez random.uniform(a, b) pour spécifier une plage différente.

3
Bill the Lizard

Selon la documentation sur random.uniform :

Retourne un nombre aléatoire N tel que a <= N <= b pour a <= b et b <= N <= a pour b <a.

tant que random.random :

Renvoie le prochain nombre à virgule flottante aléatoire dans l'intervalle [0.0, 1.0).

C'est à dire. avec random.uniform vous spécifiez une plage à partir de laquelle vous dessinez des nombres pseudo-aléatoires, par ex. entre 3 et 10. Avec random.random, vous obtenez un nombre compris entre 0 et 1.

1
RickardSjogren

En plus de ce qui est mentionné ci-dessus, .uniform() peut également être utilisé pour générer plusieurs nombres aléatoires aussi avec la forme souhaitée, ce qui n'est pas possible avec .random().

np.random.seed(99)
np.random.random()

#generates 0.6722785586307918

tandis que le code suivant

np.random.seed(99)
np.random.uniform(0.0, 1.0, size = (5,2))

#generates this 
array([[0.67227856, 0.4880784 ],
       [0.82549517, 0.03144639],
       [0.80804996, 0.56561742],
       [0.2976225 , 0.04669572],
       [0.9906274 , 0.00682573]])

Cela ne peut pas être fait avec random (...), et si vous générez des nombres aléatoires (...) pour des choses liées à ML, la plupart du temps, vous utiliserez .uniform(...)

0
Daksh