NumPy随机种子产生不同的随机数

2024-10-02 18:18:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我运行以下代码:

 np.random.RandomState(3)
 idx1 = np.random.choice(range(20),(5,))
 idx2 = np.random.choice(range(20),(5,))  
 np.random.RandomState(3)
 idx1S = np.random.choice(range(20),(5,))
 idx2S = np.random.choice(range(20),(5,))       

我得到的输出如下:

^{pr2}$

idx1和idx1S匹配,但idx2和idx2S不匹配。我希望一旦我种子随机数生成器和重复相同的命令序列-它应该产生相同的随机数序列。这不是真的吗?或者我还缺少什么?在


Tags: 代码命令nprange序列random种子choice
2条回答

您将RandomStateseed混淆。你的第一行构造了一个对象,你可以用它作为你的随机源。例如,我们

>>> rnd = np.random.RandomState(3)
>>> rnd
<mtrand.RandomState object at 0xb17e18cc>

然后呢

^{pr2}$

[我不明白为什么你的idx1idx1S同意,但实际上你没有发布一份完整的成绩单,所以我怀疑是用户错误。]

如果要影响全局状态,请使用seed

>>> np.random.seed(3)
>>> np.random.choice(range(20),(5,))
array([10,  3,  8,  0, 19])
>>> np.random.choice(range(20),(5,))
array([10, 11,  9, 10,  6])
>>> np.random.seed(3)
>>> np.random.choice(range(20),(5,))
array([10,  3,  8,  0, 19])
>>> np.random.choice(range(20),(5,))
array([10, 11,  9, 10,  6])

使用一个特定的RandomState对象乍一看可能不太方便,但是当您想要不同的熵流时,它会使很多事情变得更容易。在

我认为您应该使用RandomState类,如下所示:

In [21]: r=np.random.RandomState(3)

In [22]: r.choice(range(20),(5,))
Out[22]: array([10,  3,  8,  0, 19])

In [23]: r.choice(range(20),(5,))
Out[23]: array([10, 11,  9, 10,  6])

In [24]: r=np.random.RandomState(3)

In [25]: r.choice(range(20),(5,))
Out[25]: array([10,  3,  8,  0, 19])

In [26]: r.choice(range(20),(5,))
Out[26]: array([10, 11,  9, 10,  6])

基本上,创建RandomState的一个实例r,并进一步使用它。可以看出,重设侧线会产生相同的结果。在

相关问题 更多 >