Python 什么是伪随机?
我正在阅读随机模块的文档,注意到它说的是伪随机,而思想不是伪意味着伪,所以我想知道它说的是什么意思 例如:Python 什么是伪随机?,python,random,Python,Random,我正在阅读随机模块的文档,注意到它说的是伪随机,而思想不是伪意味着伪,所以我想知道它说的是什么意思 例如: import random print random.randint(1,2) print random.randint(1,3) 这是否仍然意味着第一个print语句有50%的几率打印1,50%的几率打印2 第二个print语句有33%的几率打印一个语句,33%的几率打印2个语句,以此类推 如果不是,那么伪随机数是如何产生的?要产生真正的随机性,需要专门的硬件来测量随机事件,例如放射
import random
print random.randint(1,2)
print random.randint(1,3)
这是否仍然意味着第一个print语句有50%的几率打印1,50%的几率打印2
第二个print语句有33%的几率打印一个语句,33%的几率打印2个语句,以此类推
如果不是,那么伪随机数是如何产生的?要产生真正的随机性,需要专门的硬件来测量随机事件,例如放射性衰变(随机)或布朗运动(也基本上是随机的)。大多数计算机显然没有这些,因此你必须使用一种非常复杂、均匀分布、难以预测的“伪随机”算法,该算法以一个由当前时间戳确定的数字开始。这样的算法对于需要“随机性”的标准用例来说已经足够好了,只要你小心不要给两个具有相同时间戳的随机数生成器植入种子(例如,在不同线程上同时启动它们),这将使它们做相同的事情。这种随机数生成器的一个常见示例是Mersenne Twister:
一个提供真正随机值的网站,解释了很多关于随机性和伪随机性的内容,并提供了一些关于其随机性的美味统计信息:(请参阅了解更多信息和统计信息)(实际上,它似乎依赖于测量混沌系统中的微小波动,例如大气噪声,但统计数据表明,它与真正的随机性非常相似,你无法将其区分开来!)要产生真正的随机性,需要专门的硬件来测量随机事件,如放射性衰变(随机)或布朗运动(也基本上是随机的)。大多数计算机显然没有这些,因此你必须使用一种非常复杂、均匀分布、难以预测的“伪随机”算法,该算法以一个由当前时间戳等确定的数字开始。只要你小心不要播种,这种算法对于需要“随机性”的标准用例来说已经足够好了两个具有相同时间戳的随机数生成器(例如,在不同线程上同时启动它们),这将使它们执行相同的操作。这种随机数生成器的一个常见示例是Mersenne Twister:
一个提供真正随机值的网站,解释了很多关于随机性和伪随机性的内容,并提供了一些关于其随机性的美味统计信息:(请参阅了解更多信息和统计信息)(实际上,它似乎依赖于测量混沌系统中的微小波动,例如大气噪声,但统计数据表明,它与真正的随机性非常相似,你无法将其区分开来!)有什么是真正随机的吗?我想以前也有人问过类似的问题。@wazy@NullUserException谢谢你的笑声。应该把这作为答案之一,呵呵。@NullUserException哈哈,解释得很好!有什么是真正随机的吗?我想以前也有人问过类似的问题。@wazy@NullUserException谢谢你r笑声。应该是其中的一个答案,呵呵。@NullUserException哈哈,解释得很好!这让我说我做了
random.randint(1,2)
将与掷硬币一样?@Christian Careaga我们谈论的是什么类型的硬币?我们谈论的是在现实生活中实际掷硬币,这取决于两面的重量、人如何决定掷硬币、硬币从哪一边开始、风、气压等?还是理想化的真正随机的硬币它的返回总是随机和不可预测的?因为它既不象两者,但它试图像后者一样,尽可能接近,而没有真正的随机性源。@Patashu也许放射性衰变也不是真正的随机,可能是我们还不能预测它。伪随机算法的一个非常简单的例子可能是:def prng(x):return(x*214013+2531011)%math.pow(2,32)
-其中x是您的种子。您会注意到相同的种子会产生相同的结果。@invert:even(受启发)。这是因为我做了random.randint(1,2)
将与掷硬币一样?@Christian Careaga我们谈论的是什么类型的硬币?我们谈论的是在现实生活中实际掷硬币,这取决于两面的重量、人如何决定掷硬币、硬币从哪一边开始、风、气压等?还是理想化的真正随机的硬币它的返回总是随机和不可预测的?因为它既不象两者,但它试图像后者一样,尽可能接近,而没有真正的随机性源。@Patashu也许放射性衰变也不是真正的随机,可能是我们还不能预测它。伪随机算法的一个非常简单的例子可能是:def prng(x):return(x*214013+2531011)%math.pow(2,32)
-其中x是您的种子。您会注意到相同的种子产生相同的结果。@invert:even(受启发)。