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?
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).
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
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.
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.
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(...)