【发布时间】:2020-07-24 07:58:28
【问题描述】:
我正在尝试将公平的硬币抛掷模拟为独立的伯努利试验,其中变量变为 1 或 0,然后在每个试验中取平均值以获得单独的序列。
我的问题是我得到的一个序列看起来错误并且与其他序列不同(Seq_1)。你能看出我做错了什么吗?
# Parameters
nSeq = 5
nTrials = 10**3
p=0.5 # Fair coin
# Containers
x = np.zeros(nTrials+1, float)
nrange = range(nTrials+1)
# Simulation
for j in range(nSeq):
Mean_list = [0] # re-initialize mean list for each sequence
for i in range(nTrials):
x[i+1] = np.random.binomial(1, p)
xbar = np.mean(x)
Mean_list.append(xbar)
plt.plot(nrange,Mean_list,label='Seq_'+str(j+1))
plt.ylabel('Estimate of p')
plt.xlabel('Trials')
plt.legend(loc=0,ncol=3,fontsize='small')
plt.show()
然后给了我这个看起来不正确的代码。由于硬币是公平的,收敛到 0.5 是正确的,但为什么 seq_1 总是与其他的不同?
**这是试图从下面的book 复制图表
总结
所以总结一下。如何在 python 中生成公平的硬币翻转(使用来自numpy 的伯努利生成的变量)然后取每次翻转产生的序列的平均值,然后使用matplotlib 在图中表示结果? (请注意,y 轴上的“p 估计值”是每次翻转时序列的平均值)。
【问题讨论】:
标签: python numpy matplotlib simulation scientific-computing