Python生成随机数随机种子“失效”:Jupyter中不同cell中生成的随机数不一致
在Python中经常会生成很多随机数,例如Python自带的random库、科学计算库NumPy、深度学习框架PyTorch等都可以生成随机数。
同时为了固定生产的随机数、使得随机数生成可复现,很多时候都会设置随机种子,这样每次都能生成固定的随机数,这样给我们的感觉就像“只要设置了随机数,后面每一次生成的随机数都是一样的”,但是实际上不是这样的:
可以看到,3个库在设置随机种子后,生成的3个随机数都是不同的,所以我们之前的哪种理解是错误的,随机种子固定的是随机过程,而不是每一个随机数本身:
对于上面的例子来说,这三次输出结果是通过设置随机数种子确定的,从设置随机数开始,相同的随机数种子后面随机的过程是固定的,第1个cell是随机过程输出的第1个结果,第2个cell是这个固定过程的第2个结果,以此类推。这3个cell输出了3个结果,可以理解成是当前种子下的随机过程输出的连续结果,这3个结果的顺序和数值是当前这个随机数种子决定的。因此,虽然每次生成的随机数结果不同,但是再运行一次这3个cell,生成的3个随机数还是与之前生成的随机数对应相等的,这就是随机数种子确定随机过程,而不是固定这个过程中每一个取值都相同。只要设置了相同的随机数,就会生成一个固定的随机过程,那么不管执行多少次过程,生成的这些随机数都是不变的,只不过每一次结果序列中的各个随机数并不保证一致。同时,随机结果与是否在Jupyter中运行并无关系,在.py文件中运行结果也相同,如下:
可以看到,每次的结果并不相同,同时过程是固定的,与Jupyter中是一致的。
作者:cutercorley
欢迎关注微信公众号 :Python极客部落