2015-09-27 2 views
5

Как я понимаю синтаксисКак создать детерминированный генератор случайных чисел с семенем numpy?

In[88]: np.random.seed(seed=0) 

In[89]: np.random.rand(5) < 0.8 
Out[89]: array([ True, True, True, True, True], dtype=bool) 
In[90]: np.random.rand(5) < 0.8 
Out[90]: array([ True, True, False, False, True], dtype=bool) 

Однако, когда я бегу rand(), я получаю разные результаты. Есть что-то, чего я не хватает с помощью функции семени?

+5

Да; если вы хотите получить тот же результат каждый раз, когда вам нужно вызвать «семя» между ними. Он уже детерминирован, но это * не означает, что вы получаете тот же результат каждый раз, когда вы вызываете 'np.random'. – jonrsharpe

+1

Это также может быть полезно для ваших целей: [Разница между 'np.random.seed()' и 'np.random.RandomState()'] (http://stackoverflow.com/a/22994890/1730674) – askewchan

ответ

6

Think генератора:

def gen(start): 
    while True: 
     start += 1 
     yield start 

Это будет постоянно давать следующий номер из числа вставки к генератору. С семенами это почти та же концепция. Я пытаюсь установить переменную, в которой будут генерироваться данные, а позиция внутри которой сохраняется. Давайте это на практике:

>>> generator = gen(5) 
>>> generator.next() 
6 
>>> generator.next() 
7 

Если вы хотите перезапустить, необходимо перезапустить генератор, а также:

>>> generator = gen(5) 
>>> generator.next() 
6 

Та же идея с Numpy объекта. Если вы хотите получить одинаковые результаты с течением времени, вам необходимо перезапустить генератор с теми же аргументами.

>>> np.random.seed(seed=0) 
>>> np.random.rand(5) < 0.8 
array([ True, True, True, True, True], dtype=bool) 
>>> np.random.rand(5) < 0.8 
array([ True, True, False, False, True], dtype=bool) 
>>> np.random.seed(seed=0) # reset the generator! 
>>> np.random.rand(5) < 0.8 
array([ True, True, True, True, True], dtype=bool) 
Смежные вопросы