В python, в чем разница между random.uniform() и random.random()?

В python для случайного модуля, в чем разница между random.uniform() и random.random()? Они генерируют псевдослучайные числа, random.uniform() генерируют числа из равномерного распределения, а random.random() генерирует следующее случайное число. В чем разница?

Ответ 1

random.random() дает вам случайное число с плавающей запятой в диапазоне [0.0, 1.0) (включая включение 0.0, но не включая 1.0, который также известен как полуоткрытый диапазон). random.uniform(a, b) дает вам случайное число с плавающей запятой в диапазоне [a, b] (где округление может дать вам b).

Реализация напрямую использует random.random():

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) в основном совпадает с random.random() (поскольку 1.0 times float value, ближайший к 1.0, все равно даст вам значение с плавающей точкой ближе к 1.0, там нет возможности ошибки округления).

Ответ 2

Разница в аргументах. Очень часто генерируется случайное число из равномерного распределения в диапазоне [0.0, 1.0], поэтому random.random() просто делает это. Используйте random.uniform(a, b), чтобы указать другой диапазон.

Ответ 3

В random.random() вывод находится между 0 и 1 и не принимает входных параметров

В то время как random.uniform() принимает параметры, в которых вы можете отправить диапазон случайного числа. например
import random as ra print ra.random() print ra.uniform(5,10)

ВЫВОД: -
0.672485369423 7.9237539416

Ответ 4

Согласно документации на random.uniform:

Возвращает случайное число N с плавающей запятой, такое, что a <= N <= b для a <= b и b <= N <= a для b < а.

while random.random:

Возвращает следующее случайное число с плавающей запятой в диапазоне [0.0, 1.0].

т.е. с random.uniform вы указываете диапазон, на который вы производите псевдослучайные числа, например, между 3 и 10. С помощью random.random вы получаете число от 0 до 1.

Ответ 5

Помимо того, что было упомянуто выше, .uniform() также может использоваться для генерации нескольких случайных чисел, которые также имеют желаемую форму, что невозможно с .random()

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

#generates 0.6722785586307918

пока следующий код

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]])

Это не может быть сделано со случайным (...), и если вы генерируете случайные (...) числа для вещей, связанных с ML, большую часть времени вы в конечном итоге будете использовать .uniform(...)