我有一个简单的脚本来设置泊松分布,通过构造概率 = 0.1 的“事件”数组,然后计算每组 10 的成功次数。它几乎可以工作,但分布不太正确(P (0) 应该等于 P(1),但大约是 P(1) 的 90%。就像有一个错误的错误,但我无法弄清楚它是什么。该脚本使用此处的 Counter 类(因为我有 Python 2.6 而不是2.7),并且分组使用这里讨论的 itertools 。这不是一个随机问题,重复给出了非常严格的结果,总体平均值看起来不错,组大小看起来不错。我搞砸了有什么想法吗?
from itertools import izip_longest
import numpy as np
import Counter
def groups(iterable, n=3, padvalue=0):
"groups('abcde', 3, 'x') --> ('a','b','c'), ('d','e','x')"
return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
def event():
f = 0.1
r = np.random.random()
if r < f: return 1
return 0
L = [event() for i in range(100000)]
rL = [sum(g) for g in groups(L,n=10)]
print len(rL)
print sum(list(L))
C = Counter.Counter(rL)
for i in range(max(C.keys())+1):
print str(i).rjust(2), C[i]
$ python script.py
10000
9949
0 3509
1 3845
2 1971
3 555
4 104
5 15
6 1
$ python script.py
10000
10152
0 3417
1 3879
2 1978
3 599
4 115
5 12