随机数生成器与随机数生成器的种子
随机数生成器的种子(seed)是用于初始化随机数生成器的值。在计算机程序中,我们通常想生成随机数序列,例如,用于模拟、优化、统计抽样等。然而,计算机本身是确定性的,因此无法生成真正的随机数。相反,我们使用所谓的伪随机数生成器(PRNG)来生成看似随机的序列。
这个伪随机序列是由算法确定的,因此如果知道算法的初始状态,我们可以预测整个序列。这个初始状态就是所谓的“种子”。
以下是种子的一些关键点:
-
确定性:相同的种子将产生相同的随机数序列。这在测试和调试时很有用,因为它使能够重现问题和解决方案。
-
不同的种子产生不同的序列:不同的种子将产生不同的随机数序列。因此,我们可以通过更改种子来获得不同的随机数。
-
不设置种子将得到不同的随机序列:如果我们不设置种子,那么随机数生成器通常会使用当前时间或其他系统参数作为种子。这意味着每次运行程序时,都将得到不同的随机序列。
以np.random.permutation函数为例
在NumPy中,我们可以使用np.random.seed(value)
来设置随机数生成器的种子。例如:
np.random.seed(42) # 设置随机种子
perm1 = np.random.permutation(5) # 产生一个0到4的随机排列
print(perm1) # 输出可能为 [3, 4, 1, 0, 2]
np.random.seed(42) # 重新设置相同的随机种子
perm2 = np.random.permutation(5) # 再次产生一个0到4的随机排列
print(perm2) # 输出将与上面的相同:[3, 4, 1, 0, 2]