Каков наилучший способ получения случайных чисел в NumPy?
Я хочу генерировать случайные числа в диапазоне -1, 1
и хочу, чтобы каждый из них имел равную вероятность генерации. То есть Я не хочу, чтобы крайности были менее вероятными. Каков наилучший способ сделать это?
До сих пор я использовал:
2 * numpy.random.rand() - 1
а также:
2 * numpy.random.random_sample() - 1
Ответы
Ответ 1
Твой подход прекрасен. Альтернативой является использование функции numpy.random.uniform()
:
>>> numpy.random.uniform(-1, 1, size=10)
array([-0.92592953, -0.6045348 , -0.52860837, 0.00321798, 0.16050848,
-0.50421058, 0.06754615, 0.46329675, -0.40952318, 0.49804386])
Что касается вероятности экстремумов: если бы это было идеализировано, непрерывные случайные числа, вероятность получить один из крайних значений была бы равна 0. Так как числа с плавающей запятой являются дискретизацией непрерывных действительных чисел, то в реальности есть некоторые положительная вероятность получить некоторые из крайностей. Это некоторая форма ошибки дискретизации, и почти наверняка эта ошибка будет искажена другими ошибками в вашей симуляции. Не беспокойтесь!
Ответ 2
Обратите внимание, что numpy.random.rand
позволяет сгенерировать несколько выборок из равномерного распределения при одном вызове:
>>> np.random.rand(5)
array([ 0.69093485, 0.24590705, 0.02013208, 0.06921124, 0.73329277])
Он также позволяет создавать образцы в заданной форме:
>>> np.random.rand(3,2)
array([[ 0.14022471, 0.96360618],
[ 0.37601032, 0.25528411],
[ 0.49313049, 0.94909878]])
Как вы сказали, равномерно распределенные случайные числа между [-1, 1) могут быть сгенерированы с помощью:
>>> 2 * np.random.rand(5) - 1
array([ 0.86704088, -0.65406928, -0.02814943, 0.74080741, -0.14416581])
Ответ 3
Из документации для numpy.random.random_sample
:
Результаты взяты из "непрерывного равномерного" распределения за указанный интервал. Чтобы пробовать Unif [A, b), b > умножить вывод random_sample на (b-a)
и добавить a
:
(b - a) * random_sample() + a
Per Sven Marnach отвечает, документация, вероятно, нуждается в обновлении для ссылки numpy.random.uniform
.