Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中生成指数分布_Python_Python 3.x_Probability_Probability Density - Fatal编程技术网

在Python中生成指数分布

在Python中生成指数分布,python,python-3.x,probability,probability-density,Python,Python 3.x,Probability,Probability Density,我知道random.expovariate函数,但这不是我需要的。 我想生成一个长度为N的流,其中1和M之间的每个元素I以概率1/(2^(I+1))进行选择 因此,元素0以1/2的概率选择,元素1以1/4的概率选择,元素2以1/8的概率选择,等等 在python中有什么简单的方法可以做到这一点吗?简单的解决方案是还原函数并预测概率以找到数字: def generate(): proba = random.random() max = 0 for i in range(1,

我知道
random.expovariate
函数,但这不是我需要的。 我想生成一个长度为
N
的流,其中
1
M
之间的每个元素
I
以概率1/(2^(I+1))进行选择 因此,元素
0
以1/2的概率选择,元素
1
以1/4的概率选择,元素2以1/8的概率选择,等等


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

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

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 = 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])