Подтвердить что ты не робот

Разница между np.random.seed() и np.random.RandomState()

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

import numpy as np
np.random.seed(1234)

но что np.random.RandomState() делать?

4b9b3361

Ответ 1

Если вы хотите установить начальное значение, np.random... будет использовать np.random..., используйте np.random.seed:

np.random.seed(1234)
np.random.uniform(0, 10, 5)
#array([ 1.9151945 ,  6.22108771,  4.37727739,  7.85358584,  7.79975808])
np.random.rand(2,3)
#array([[ 0.27259261,  0.27646426,  0.80187218],
#       [ 0.95813935,  0.87593263,  0.35781727]])

Используйте класс, чтобы избежать влияния на глобальное состояние numpy:

r = np.random.RandomState(1234)
r.uniform(0, 10, 5)
#array([ 1.9151945 ,  6.22108771,  4.37727739,  7.85358584,  7.79975808])

И он поддерживает состояние так же, как и раньше:

r.rand(2,3)
#array([[ 0.27259261,  0.27646426,  0.80187218],
#       [ 0.95813935,  0.87593263,  0.35781727]])

Вы можете увидеть состояние своего рода "глобального" класса с помощью:

np.random.get_state()

и вашего собственного экземпляра класса с:

r.get_state()

Ответ 2

random.seed - это метод заполнения random.RandomState.

из numpy docs:

numpy.random.seed(seed=None)

Вставьте генератор.

Этот метод вызывается при инициализации RandomState. Его можно снова вызвать, чтобы повторно залить генератор. Подробнее см. RandomState.

class numpy.random.RandomState

Контейнер для псевдослучайного генератора Мерсенна Твистера.

Ответ 3

np.random.RandomState() создает генератор случайных чисел. Он не влияет на автономные функции в np.random, но должен использоваться явно:

>>> rng = np.random.RandomState(42)
>>> rng.randn(4)
array([ 0.49671415, -0.1382643 ,  0.64768854,  1.52302986])
>>> rng2 = np.random.RandomState(42)
>>> rng2.randn(4)
array([ 0.49671415, -0.1382643 ,  0.64768854,  1.52302986])