Разница между выполнением np.random.seed () локально и глобально / - PullRequest
1 голос
/ 18 июня 2020

Я хотел бы знать разницу между выполнением np.random.seed() внутри функции и вне ее. (то же семя) Например ...

np.random.seed(1)
def coin_toss():
    if np.random.randint(0,2) == 1:
        return 'HEAD'
    else:
        return 'TAIL'
for value in range (10): 
    print(coin_toss())

Результатом этого будет

HEAD
HEAD
TAIL
TAIL
HEAD
HEAD
HEAD
HEAD
HEAD
TAIL

С другой стороны, когда я помещаю np.random.seed (1) внутрь функция, я получил другой результат.

def coin_toss2():
    np.random.seed(1)
    if np.random.randint(0,2) == 1:
        return 'HEAD'
    else:
        return 'TAIL'
for value in range(10):
    print(coin_toss2())

результат будет

HEAD
HEAD
HEAD
HEAD
HEAD
HEAD
HEAD
HEAD
HEAD
HEAD

Поскольку начальное число, 1, одинаково в обоих примерах, я ожидал, что я получил такие же результаты. Какие различия вызывают разницу в выходных сигналах? Может кто-нибудь объяснить это? Я только что понял, что есть еще понятие глобального и локального в случайном состоянии. Однако я до сих пор не понимаю, почему произошла эта разница.

1 Ответ

0 голосов
/ 18 июня 2020

Seed - значение, используемое для генерации псевдо-числа. Текущее начальное значение - это предыдущее значение, сгенерированное случайным образом. Если предыдущее начальное число недоступно, Numpy использует системное время по умолчанию.

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

np.random.seed(0)
np.random.randint(0, 10)
np.random.randint(0, 10)
np.random.randint(0, 10)
5
0
3

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

np.random.seed(0)
np.random.randint(0, 10)
np.random.seed(0)
np.random.randint(0, 10)
np.random.seed(0)
np.random.randint(0, 10)
5
5
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...