numpy.random.RandomState
class numpy.random.RandomState(seed=None)
Класс random.RandomState() может использоваться в качестве контейнера для генератора случайных чисел.
Данный класс позволяет создавать несколько объектов - генераторов, которые могут использоваться в разных местах кода, но гарантированно выдавать одни и те же случайные значения. Это очень удобно, если вам необходима воспроизводимость расчетов, или сравнение разных алгоритмов на одних и тех же случайных данных.
-
- seed - целое положительное число.
- Число в интервале [0, 2**32] - определяет внутреннее состояние генератора..
Примеры
Использование данного класса очень удобно при очень частом обращении к модулю random. Сравните:
>>> import numpy as np
>>>
>>> np.random.seed(0)
>>>
>>> np.random.rand(5)
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
>>>
>>> np.random.randint(0, 10, 5)
array([5, 0, 3, 3, 7])
>>>
>>> np.random.beta(2, 3, 5)
array([0.60358975, 0.79868334, 0.31163262, 0.49864896, 0.41528042])
Или с использованием RandomState()
:
>>> rng = np.random.RandomState(0)
>>>
>>> rng.rand(5)
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
>>>
>>> rng.randint(0, 10, 5)
array([5, 0, 3, 3, 7])
>>>
>>> rng.beta(2, 3, 5)
array([0.60358975, 0.79868334, 0.31163262, 0.49864896, 0.41528042])
Так же иногда бывает очень удобно иметь несколько генераторов с предустановленным состоянием:
>>> RS_1 = np.random.mtrand.RandomState([0, 1])
>>> RS_2 = np.random.mtrand.RandomState([0, 1])
>>>
>>> for i in range(10):
... print('RS_1 ->', RS_1.randint(10),
... 'RS_2 ->', RS_2.randint(10))
...
RS_1 -> 7 RS_2 -> 7
RS_1 -> 6 RS_2 -> 6
RS_1 -> 2 RS_2 -> 2
RS_1 -> 9 RS_2 -> 9
RS_1 -> 3 RS_2 -> 3
RS_1 -> 0 RS_2 -> 0
RS_1 -> 1 RS_2 -> 1
RS_1 -> 1 RS_2 -> 1
RS_1 -> 5 RS_2 -> 5
RS_1 -> 4 RS_2 -> 4
>>>
>>> RS_1.normal(0, 1)
-0.10202330473543429
>>> RS_2.normal(0, 1)
-0.10202330473543429