Python 是否为random.seed()选择的每个种子都能保证random将生成均匀分布的序列?

Python 是否为random.seed()选择的每个种子都能保证random将生成均匀分布的序列?,python,random,seed,Python,Random,Seed,假设我想使用random.seed(seed)和n个对random.random()的后续调用生成n>10^20个数字。是否保证生成的序列均匀分布,而不考虑种子的选择值 假设我想生成n>10^20个数字 让我们说不。如果每秒可以生成10亿个值,则需要1E20个值/1E9个值/秒/3600秒/小时/24小时/天/365.25天/年,即超过3000年。即使你有可靠的硬件和能源,你也不会看到结果 使用random.seed(seed)和n个对random.random()的后续调用 结果在统计学上与均

假设我想使用random.seed(seed)和n个对random.random()的后续调用生成n>10^20个数字。是否保证生成的序列均匀分布,而不考虑种子的选择值

假设我想生成n>10^20个数字

让我们说不。如果每秒可以生成10亿个值,则需要
1E20个值/1E9个值/秒/3600秒/小时/24小时/天/365.25天/年
,即超过3000年。即使你有可靠的硬件和能源,你也不会看到结果

使用random.seed(seed)和n个对random.random()的后续调用

结果在统计学上与均匀性是无法区分的,因为底层算法Mersenne Twister就是为了产生这种行为而设计的

假设我想生成n>10^20个数字

让我们说不。如果每秒可以生成10亿个值,则需要
1E20个值/1E9个值/秒/3600秒/小时/24小时/天/365.25天/年
,即超过3000年。即使你有可靠的硬件和能源,你也不会看到结果

使用random.seed(seed)和n个对random.random()的后续调用


结果在统计上与uniform无法区分,因为底层算法Mersenne Twister旨在产生这种行为。

@BradSolomon如果您对每个调用重新进行种子设定,则实际上是将PRNG用作种子值的哈希函数。除非种子值本身的i.i.d.是一致的(在这种情况下,为什么需要PRNG?),否则不知道结果可能有什么分布。我想我会跟随你。但在这种情况下,循环通过一步范围意味着您有均匀分布的种子值,对吗?至少在经验上,结果似乎是一致的。我并不是在宽恕重新调用
seed
@BradSolomon一致性不是PRNG的唯一要求。你还需要模仿独立性。作为一个极端情况,序列1,2,3,4,。。。将是渐近一致的,但不会通过任何独立性测试。我认为你答案的第一部分是不相关的。但是,正如我从第二部分得到的,这个算法为每个给定的种子生成一个均匀分布的序列(对于足够大的n)。这就是我想知道的。@Moon我不同意第一部分。我不知道你从哪里得到这样一个想法,即需要大量的样本才能观察到均匀性,但事实并非如此,所以问你永远不会处理的样本量有什么意义?Mersenne Twister以统计上合适的速率通过(或失败)@bradsomon如果您在每次调用中都重新设置种子,那么实际上就是在使用PRNG作为种子值的哈希函数。除非种子值本身的i.i.d.是一致的(在这种情况下,为什么需要PRNG?),否则不知道结果可能有什么分布。我想我会跟随你。但在这种情况下,循环通过一步范围意味着您有均匀分布的种子值,对吗?至少在经验上,结果似乎是一致的。我并不是在宽恕重新调用
seed
@BradSolomon一致性不是PRNG的唯一要求。你还需要模仿独立性。作为一个极端情况,序列1,2,3,4,。。。将是渐近一致的,但不会通过任何独立性测试。我认为你答案的第一部分是不相关的。但是,正如我从第二部分得到的,这个算法为每个给定的种子生成一个均匀分布的序列(对于足够大的n)。这就是我想知道的。@Moon我不同意第一部分。我不知道你从哪里得到这样一个想法,即需要大量的样本才能观察到均匀性,但事实并非如此,所以问你永远不会处理的样本量有什么意义?Mersenne捻线机以统计上合适的速率通过(和失败)。