【发布时间】:2015-08-05 05:25:38
【问题描述】:
我需要按组生成随机数:100、500、1000 和 10000 个数字制服和高斯。这是创建一些直方图和其他统计数据所必需的。
条件是不使用python自带的随机函数,所以想用这个方法(线性同余生成器):Xn+1 ≡ (aXn + c) mod m。这里我需要 4 个变量。
有人可以告诉我如何实现这个算法吗?我假设 m 变量第一次是 100
【问题讨论】:
-
我怀疑你会找到一个很好的 m=100 的线性同余生成器。您应该查看具有更大 m 的生成器。更好的是,如果你有时间,可以使用 Mersenne Twister。然后使用其他技术将最终结果获得到您想要的统一范围内,或者将生成器的输出转换为高斯(这里有各种关于类似主题的先前问题,因此请查找它们)。
-
我试过这个:n=1 c=3 x=0 m=100 for i in range(100): x = (a*x+c) % m
-
非常感谢大卫,我去看看
-
@DavidK python 的原生 PRNG 是 Mersenne Twister。
-
@pjs 很高兴知道这一点。了解为什么不使用本机函数的条件可能是相关的。如果是“我希望你有实现随机数生成器的经验,而不仅仅是调用
random.randint()”,那么任何好的 RNG 都应该是公平的游戏。如果是“我想让你实现一个不是 Mersenne Twister 的 RNG,以便我们可以比较这两种算法”,那么当然不能使用 MT。