我是靠谱客的博主 顺心啤酒,最近开发中收集的这篇文章主要介绍Python的random内置模块产生的随机数真的随机吗?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

先说结论:不止Python的random内置模块,还包括numpy的随机抽样子模块random,以及其他编程语言的随机数生成器,例如java.Math.Random()函数,所有这些随机数生成器生成的随机数都不是真正的随机数,而是伪随机数。

什么是真随机数呢?真随机数的典型特征是不可预测性。上面所说的这些随机数生成器都是在一个封闭的系统内,使用固定的算法(通常是线性同余或平方取中),通过一个种子(通常用时钟代替)生成随机数。这意味着,如果知道了种子和已经产生的随机数,就可能获得接下来随机数序列的信息,这就是伪随机数的可预测性。

下面的代码,很容易证明Python的random内置模块所生成随机数的伪随机性。

>>> import random
>>> random.seed(12345)
>>> [random.random() for i in range(3)]
[0.41661987254534116, 0.010169169457068361, 0.8252065092537432]

random.seed() 函数指定伪随机数生成器的初始化种子为12345,在该条件下生成的随机数序列是固定的。上面的代码显示了前3个随机数。在任意时刻,再次使用相同的种子初始化伪随机数生成器,那么接下来生成的随机数就是可预测的(已知的)。

>>> random.seed(12345)
>>> random.random()
0.41661987254534116
>>> random.random()
0.010169169457068361
>>> random.random()
0.8252065092537432

可见,random生成随机数的确是伪随机数。那么,如何生成真正意义上的随机数呢?在一个封闭的系统内,因为计算机硬件是确定的,代码是固定的,算法是准确的,通过这些确定的、固定的、准确的东西不会产生真正的随机数,除非引入这个封闭系统以外的因素,比如天空云朵的形状、邻居家无线网络信号的强度、海岸线形状等。

不过,要想引入封闭系统之外的随机因子并非易事。在某些计算机系统中,使用电路的热噪声来产生真随机数。这究竟是不是真正意义上的随机数,我对此持怀疑态度,因为热噪声的某些特性是可预知的,比如,芯片功耗越大,发热量越大;环境温度越高,散热效果越差。

最后

以上就是顺心啤酒为你收集整理的Python的random内置模块产生的随机数真的随机吗?的全部内容,希望文章能够帮你解决Python的random内置模块产生的随机数真的随机吗?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部