Разница между np.random.seed() и np.random.RandomState()
Я знаю, что для того, чтобы засеять случайность numpy.random и уметь воспроизводить его, я должен:
import numpy as np
np.random.seed(1234)
но что
np.random.RandomState()
делать?
Ответы
Ответ 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])