Python 随机数算法

Python 随机数算法,python,algorithm,random,Python,Algorithm,Random,我需要按组生成随机数:100、500、1000和10000个数字和高斯数。这对于创建一些直方图和其他统计数据是必要的 条件是不使用python的本机随机函数,所以我考虑使用这种方法(线性同余生成器):Xn+1≡ (aXn+c)模块m。这里我需要4个变量。 有人能告诉我如何实现这个算法吗?我假设第一次使用的m变量是100你已经知道了,那么什么东西这么难读懂呢 它告诉您已经知道的公式,以及您应该如何选择它们的说明: 一般LCG的周期最多为m,并且对于某些 系数a远小于此。如果偏移量c不为零, 当且仅

我需要按组生成随机数:100、500、1000和10000个数字和高斯数。这对于创建一些直方图和其他统计数据是必要的

条件是不使用python的本机随机函数,所以我考虑使用这种方法(线性同余生成器):
Xn+1≡ (aXn+c)模块m
。这里我需要4个变量。
有人能告诉我如何实现这个算法吗?我假设第一次使用的m变量是100

你已经知道了,那么什么东西这么难读懂呢

它告诉您已经知道的公式,以及您应该如何选择它们的说明:

一般LCG的周期最多为m,并且对于某些 系数a远小于此。如果偏移量c不为零, 当且仅当满足以下条件时,LCG将对所有种子值具有完整的周期:

1) c和m是相对素数

2) a-1可被m的所有素数因子整除

3) 如果m是4的倍数,则a-1是4的倍数

他们甚至在下表中给出了这些值的一些示例。这足以实现一个简单的功能:

def LCG(seed, n, a=1664525, c=1013904223, m=2**32):
    numbers = []
    for i in xrange(n):
        seed = (a * seed + c) % m
        numbers.append(seed)

    return numbers

print LCG(3, 5)

你已经知道,这是,那么什么是那么难读了吗

它告诉您已经知道的公式,以及您应该如何选择它们的说明:

一般LCG的周期最多为m,并且对于某些 系数a远小于此。如果偏移量c不为零, 当且仅当满足以下条件时,LCG将对所有种子值具有完整的周期:

1) c和m是相对素数

2) a-1可被m的所有素数因子整除

3) 如果m是4的倍数,则a-1是4的倍数

他们甚至在下表中给出了这些值的一些示例。这足以实现一个简单的功能:

def LCG(seed, n, a=1664525, c=1013904223, m=2**32):
    numbers = []
    for i in xrange(n):
        seed = (a * seed + c) % m
        numbers.append(seed)

    return numbers

print LCG(3, 5)

你已经知道,这是,那么什么是那么难读了吗

它告诉您已经知道的公式,以及您应该如何选择它们的说明:

一般LCG的周期最多为m,并且对于某些 系数a远小于此。如果偏移量c不为零, 当且仅当满足以下条件时,LCG将对所有种子值具有完整的周期:

1) c和m是相对素数

2) a-1可被m的所有素数因子整除

3) 如果m是4的倍数,则a-1是4的倍数

他们甚至在下表中给出了这些值的一些示例。这足以实现一个简单的功能:

def LCG(seed, n, a=1664525, c=1013904223, m=2**32):
    numbers = []
    for i in xrange(n):
        seed = (a * seed + c) % m
        numbers.append(seed)

    return numbers

print LCG(3, 5)

你已经知道,这是,那么什么是那么难读了吗

它告诉您已经知道的公式,以及您应该如何选择它们的说明:

一般LCG的周期最多为m,并且对于某些 系数a远小于此。如果偏移量c不为零, 当且仅当满足以下条件时,LCG将对所有种子值具有完整的周期:

1) c和m是相对素数

2) a-1可被m的所有素数因子整除

3) 如果m是4的倍数,则a-1是4的倍数

他们甚至在下表中给出了这些值的一些示例。这足以实现一个简单的功能:

def LCG(seed, n, a=1664525, c=1013904223, m=2**32):
    numbers = []
    for i in xrange(n):
        seed = (a * seed + c) % m
        numbers.append(seed)

    return numbers

print LCG(3, 5)

我怀疑你能找到一个m=100的好的线性同余生成器。你应该看看m大得多的发电机。更好的是,如果您有时间,可以使用Mersenne Twister。然后使用其他技术将最终结果转换为您想要的统一范围,或者将生成器的输出转换为高斯(在类似的主题上,这里有很多以前的问题,所以请查阅)。我已经尝试过这个方法:n=1c=3x=0m=100,对于范围(100)中的i:x=(a*x+c)%m非常感谢david,我会查的out@DavidKpython的原生PRNG是Mersenne Twister。@pjs很高兴知道这一点。这可能与了解为什么施加不使用本机函数的条件有关。如果是“我希望你有实现随机数生成器的经验,而不是仅仅调用
random.randint()
”,那么任何好的RNG都应该是公平的。如果是“我想你实现一个不是Mersenne Twister的RNG,这样我们就可以比较这两种算法”,那么当然不能使用MT。我怀疑你会找到一个m=100的好的线性同余生成器。你应该看看m大得多的发电机。更好的是,如果您有时间,可以使用Mersenne Twister。然后使用其他技术将最终结果转换为您想要的统一范围,或者将生成器的输出转换为高斯(在类似的主题上,这里有很多以前的问题,所以请查阅)。我已经尝试过这个方法:n=1c=3x=0m=100,对于范围(100)中的i:x=(a*x+c)%m非常感谢david,我会查的out@DavidKpython的原生PRNG是Mersenne Twister。@pjs很高兴知道这一点。这可能与了解为什么施加不使用本机函数的条件有关。如果是“我希望你有实现随机数生成器的经验,而不是仅仅调用
random.randint()
”,那么任何好的RNG都应该是公平的。如果是“我想你实现一个不是Mersenne Twister的RNG,这样我们就可以比较这两种算法”,那么当然不能使用MT。我怀疑你会找到一个m=100的好的线性同余生成器。你应该看看m大得多的发电机。更好的是,如果您有时间,可以使用Mersenne Twister。然后使用其他技术将最终结果转换为您想要的统一范围,或者将生成器的输出转换为高斯(在类似的主题上,这里有很多以前的问题,所以请查阅)。我已经尝试过这个方法:n=1c=3x=0m=100,对于范围(100)中的i:x=(a*x+c)%m非常感谢david,我会查的out@DavidKpython的原生PRNG是Mersenne Twister。@pjs很高兴知道这一点。这可能是相关的,知道为什么情况不是这样