Python random.expovariate(速率)和numpy.random.poisson(数量)产生相同的平均值,但分布差异很大。为什么会这样?

Python random.expovariate(速率)和numpy.random.poisson(数量)产生相同的平均值,但分布差异很大。为什么会这样?,python,numpy,statistics,distribution,poisson,Python,Numpy,Statistics,Distribution,Poisson,我正在对整个公司使用的负载测试框架进行一些修改,这是一个我很想得到答案的问题 我的印象是,以下两种生成泊松分布的方法是等效的,但我显然错了: #!/usr/bin/env python from numpy import average, random, std from random import expovariate def main(

我正在对整个公司使用的负载测试框架进行一些修改,这是一个我很想得到答案的问题

我的印象是,以下两种生成泊松分布的方法是等效的,但我显然错了:

#!/usr/bin/env python                                                                            

from numpy import average, random, std
from random import expovariate

def main():

    for count in 5.0, 50.0:
        data = [random.poisson(count) for i in range(10000)]
        print 'npy_poisson average with count=%d: ' % count, average(data)
        print 'npy_poisson std_dev with count=%d: ' % count, std(data)

        rate = 1 / count
        data = [expovariate(rate) for i in range(10000)]
        print 'expovariate average with count=%d: ' % count, average(data)
        print 'expovariate std_dev with count=%d: ' % count, std(data)

if __name__ == '__main__':
    main()
这将产生如下输出:

npy_poisson average with count=5:   5.0168
npy_poisson std_dev with count=5:   2.23685443424
expovariate average with count=5:   4.94383067075
expovariate std_dev with count=5:   4.95058985422
npy_poisson average with count=50:  49.9584
npy_poisson std_dev with count=50:  7.07829565927
expovariate average with count=50:  50.9617389096
expovariate std_dev with count=50:  51.6823970228
为什么当我使用内置随机指数标度时,标准偏差与给定间隔内的事件数成比例,而指数标准偏差以对数基数10(计数)的速率标度


后续问题:如果您模拟用户与您的服务交互的频率,那么哪一个更合适?

因为您的假设是错误的。泊松分布的均值/方差都是
lambda
,因此
stdev
sqrt(lambda)
。指数分布的均值/方差分别为
1/lambda
1/lambda^2
。所以
std=sqrt(1/(1/速率)^2)=sqrt(速率^2)=rate
这正是您在这里看到的


我建议你阅读维基百科上关于的文章,作为后续问题。

因为你的假设是错误的。泊松分布的均值/方差都是
lambda
,因此
stdev
sqrt(lambda)
。指数分布的均值/方差分别为
1/lambda
1/lambda^2
。所以
std=sqrt(1/(1/速率)^2)=sqrt(速率^2)=rate
这正是您在这里看到的

我建议你阅读维基百科上关于你的后续问题的文章