Как использовать numpy .random для генерации случайных чисел из определенного распределения? - PullRequest
1 голос
/ 14 января 2020

Я несколько озадачен тем, как использовать numpy .random для генерации случайных значений из распределения типа, скажем, биномиального. Я думал, что это будет

import numpy as np
np.random.binomial(10, 0.3, 5)

Тем не менее, NumPy справочная страница показывает что-то вроде

from numpy.random import default_rng
rg = default_rng()
rg.binomial(10, 0.3, 5)

Оба, кажется, работают хорошо. Какой из них правильный или лучший? Какая разница, если она есть?

Ответы [ 3 ]

2 голосов
/ 14 января 2020

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

Второй блок кода создает объект генератора случайных чисел с default_rng() и использует этот объект для генерации случайных чисел, не полагаясь на глобальное состояние.

Обратите внимание, что numpy.random.binomial (в дополнение к другим numpy.random.* функции) теперь является устаревшей функцией с NumPy 1.17; NumPy 1.17 представляет новую систему генерации случайных чисел , которая демонстрируется во втором блоке кода в вашем вопросе. Это было результатом предложения об изменении политики ГСЧ . Желание избежать глобального состояния было одной из причин изменения этой политики.

0 голосов
/ 14 января 2020
import random
random.choice([2,44,55,66])

Важная вещь, которую необходимо понять о методе случайного выбора, заключается в том, что Python не заботится о фундаментальной природе объектов, содержащихся в этом списке.

0 голосов
/ 14 января 2020

Это не работает в Python2 .7 / numpy 1.16:

>>> from numpy.random import default_rng
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name default_rng
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...