Почему np.random.seed (0) не делает создание массива детерминированным? - PullRequest
0 голосов
/ 17 марта 2019

Чтобы получить детерминированный результат, я попытался использовать np.random.seed(0), но заметил, что он не работает, как я предполагал.
Простой фрагмент, демонстрирующий это, выглядит следующим образом:

import numpy as np 
np.random.seed(0)
error = np.random.rand(2,5)
print('error: \n' ,error)

Приведенный выше фрагмент кода создает следующий вывод:

error: 
 [[ 0.5488135   0.71518937  0.60276338  0.54488318  0.4236548 ]
 [ 0.64589411  0.43758721  0.891773    0.96366276  0.38344152]]

Я могу запускать код столько раз, сколько мне нравится, и вывод является определяющим, как и предполагалось.но когда я пытаюсь создать второй массив, это уже не так!
Ниже приведен фрагмент кода:

import numpy as np 
np.random.seed(0)
error = np.random.rand(2,5)
error2 = np.random.rand(2,5)
print('error: \n' ,error)
print('error2: \n' ,error2) 

вывод:

error: 
 [[ 0.5488135   0.71518937  0.60276338  0.54488318  0.4236548 ]
 [ 0.64589411  0.43758721  0.891773    0.96366276  0.38344152]]
error: 
 [[ 0.79172504  0.52889492  0.56804456  0.92559664  0.07103606]
 [ 0.0871293   0.0202184   0.83261985  0.77815675  0.87001215]]

Чего мне не хватаетВот?Я думал, что установка начального числа допускает детерминированное поведение, но, очевидно, это здесь не применимо!что происходит здесь?

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

Вы должны повторно заполнять ГСЧ каждый раз.

import numpy as np 
np.random.seed(0)
error = np.random.rand(2,5)
np.random.seed(0)
error2 = np.random.rand(2,5)
print('error: \n' ,error)
print('error2: \n' ,error2)

В противном случае вы просто продолжаете случайную последовательность, а не начинаете заново.

1 голос
/ 17 марта 2019

Если (псевдо) генератор случайных чисел (ре) инициализирован с тем же начальным числом, он выдаст одинаковую последовательность чисел .

np.random.seed(0)
print (np.random.rand(),np.random.rand())

0.5488135039273248 0.7151893663724195

np.random.seed(0)
print (np.random.rand(),np.random.rand())

0.5488135039273248 0.7151893663724195

Это не будет (псевдо) генератор случайных чисел, если он генерирует одно и то же случайное число каждый раз для начального числа.Это будет какая-то детерминированная функция f(seed).Когда вы заполняете его, последовательность чисел является детерминированной, но числа сами по себе являются случайными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...