我知道要播种numpy.random的随机性,并且能够重现它,我应该:
import numpy as np
np.random.seed(1234)
但是做什么
np.random.RandomState()
办?
答案 0 :(得分:58)
如果您要设置调用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()
答案 1 :(得分:8)
random.seed是一种填充random.RandomState容器的方法。
来自numpy docs的:
numpy.random.seed(seed=None)
种子发电机。
初始化RandomState时调用此方法。可以再次调用它来重新生成发电机。有关详细信息,请参阅RandomState。
class numpy.random.RandomState
Mersenne Twister伪随机数生成器的容器。
答案 2 :(得分:7)
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])
答案 3 :(得分:0)
np.random.RandomState()-提供基于不同概率分布的几种方法的类。
np.random.RandomState.seed()-初始化RandomState()时调用。
答案 4 :(得分:0)
Seed
是一个全局伪随机生成器。然而,randomstate
是一个与其他人隔离的伪随机生成器,它只影响特定的变量。
rng = np.random.RandomState(0)
rng.rand(4)
# Out[1]: array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
rng = np.random.RandomState(0)
rng.rand(4)
# Out[2]: array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
和Seed
基本一样,但如下,我们不给变量赋值。
np.random.RandomState(0)
# Out[3]: <mtrand.RandomState at 0xddaa288>
np.random.rand(4)
# Out[4]: array([0.62395295, 0.1156184 , 0.31728548, 0.41482621])
np.random.RandomState(0)
# Out[5]: <mtrand.RandomState at 0xddaac38>
np.random.rand(4)
# Out[6]: array([0.86630916, 0.25045537, 0.48303426, 0.98555979])
后者与前者不同。这意味着 randomstate 仅在特定变量内有效。