连续获得两个头的预期投掷次数为6.但是,在执行本次实验的多次运行的下面模拟时,我得到了与预期不同的图。你能帮我识别逻辑中的错误吗? 感谢
模拟投掷的代码,并在重复10000次遇到两个连续头时检查:
import random
def toss():
return random.randint(0, 1)
expected_tosses=list()
for test in range(10000):
a=toss()
for i in range(2,100):
b=toss()
if a and b:
expected_tosses.append(i)
break
a=b
import matplotlib.pyplot as plt
plt.hist(expected_tosses, range(1,10))
plt.show()
答案 0 :(得分:3)
您正在通过限制上循环来更改统计信息。改为使用无限循环。
然后代码看起来像下面哪个应该更精确:
import random
def toss():
return random.randint(0, 1)
expected_tosses=list()
for test in range(10000):
a=toss()
i = 2
while True:
b=toss()
if a and b:
expected_tosses.append(i)
break
a=b
i+=1
import matplotlib.pyplot as plt
print(sum(expected_tosses) / float(len(expected_tosses)))
plt.hist(expected_tosses, range(1,10))
plt.show()
结果还可以!
我介绍了计算所需投掷的平均值(在上面的代码中)并打印出来。你会看到,手段看起来像你期望的那样!
一些示例输出(我们不使用种子,因此每次运行的结果都不同):
5.9941
要明确:平均值并没有告诉你关于直方图的形状的更多信息。也许这是你混乱的根源(在你的情节中接近最小值为6)。