我正在阅读随机模块的文档,并注意到它说伪随机和思想不伪意味着假,所以我想知道它是什么意思,当它说
例如:
import random
print random.randint(1,2)
print random.randint(1,3)
Run Code Online (Sandbox Code Playgroud)
这仍然意味着第一个印刷声明有50%的机会打印1和50%的机会打印2
并且第二个打印声明有33%的机会打印一个,33%的机会打印2等.
如果没有,那么伪随机数是如何生成的?
要产生真正的随机性,需要专门的硬件来测量随机事件,例如放射性衰变(随机)或布朗运动(也基本上是随机的).大多数计算机显然没有这些,所以相反,你必须使用一个非常复杂,均匀分布,难以预测的"伪随机"算法,该算法以一个由例如当前时间戳确定的数字开始.这种算法对于需要"随机性"的标准用例来说已经足够好了,只要你小心不要为具有相同时间戳的两个随机数生成器(例如在不同线程上同时启动它们)播种,这将使得他们做同样的事情.这种随机数发生器的一个常见例子是Mersenne Twister:http://en.wikipedia.org/wiki/Mersenne_twister
一个提供真正随机值的网站,解释了很多关于随机性和伪随机性的信息,并且有一些关于其随机性的美味统计数据:http://www.random.org/(参见了解更多信息和统计数据)(实际上它似乎依赖于测量混沌系统中的微小波动,例如大气噪声,但统计数据表明它与真正的随机性非常相似,你无法分辨它!)