【问题标题】:Fair coin in PythonPython中的公平硬币
【发布时间】: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


    【解决方案1】:

    你首先创建一个 0 的数组

    x = np.zeros(nTrials+1, float)
    

    然后填写。

    x[i+1] =  np.random.binomial(1, p) 
    

    在下一个序列中,您的数组已经填写完毕,您正在覆盖数据。

    你必须

    1. 为每个序列创建一个新数组
    2. 对数组的模拟部分取平均值(省略尾随的 0)

    您还可以允许均值列表不从 0 开始以获得更漂亮的图表。

    实施

    import numpy as np
    import matplotlib.pyplot as plt
    # Parameters
    
    nSeq = 5
    nTrials = 10 ** 3
    p = 0.5  # Fair coin
    
    # Containers
    
    nrange = range(nTrials)
    
    # Simulation
    
    for j in range(nSeq):
        x = np.zeros(nTrials + 1, float)
        Mean_list = []  # re-initialize mean list for each sequence
        for i in range(nTrials):
            x[i] = np.random.binomial(1, p)
            xbar = np.mean(x[:i+1])
            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()
    

    【讨论】:

    • 请@Nathan 以图形方式向我展示这个?我宁愿不将每个序列存储为数组的行/列,以便通过不存储它来提高效率。我明白不是从零开始,而是从另一部分开始。
    • 我刚试过这样做,但我得到了相同的图表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多