代码之家  ›  专栏  ›  技术社区  ›  Tiffany

在Python中生成指数分布

  •  1
  • Tiffany  · 技术社区  · 6 年前

    我知道 random.expovariate 我想生成一个长度为 N 其中每个元素 i 之间 1 M 因此,元素 0 以1/2的概率选择,元素 1

    在python中有什么简单的方法可以做到这一点吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Frayal    6 年前

    简单的解决方案是将函数还原并预测概率,以找到数字:

    def generate():
        proba = random.random()
        max = 0
        for i in range(1,M+1):
             max += (1/2)**i
             if(proba<= max):
                  return i-1
        return generate()
    

    如果M很小,则分布不收敛,因此不是所有的[0,1]都是可到达的,所以您可以再试一次。

    小测试:

    M = 10
    res = [0 for i in range(M+1)]
    for i in range(1000):
        res[generate()]+=1
    plt.plot([r/1000 for r in res])
    

    enter image description here