Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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_Simulate_Coin Flipping - Fatal编程技术网

python中的硬币翻转模拟

python中的硬币翻转模拟,python,simulate,coin-flipping,Python,Simulate,Coin Flipping,我想模拟一枚硬币翻转500次。然后,我必须创建一个图表,显示在x轴上翻转硬币时,硬币头部的运行比例,在y轴上显示头部的比例。我编写了Python代码,出现了以下错误: Traceback (most recent call last): File "E:\ProgramsPython\My\bayes\Coin Flip.py", line 22, in <module> ylist = [coinFlip(x) for x in xlist] File "E:\ProgramsPy

我想模拟一枚硬币翻转500次。然后,我必须创建一个图表,显示在x轴上翻转硬币时,硬币头部的运行比例,在y轴上显示头部的比例。我编写了Python代码,出现了以下错误:

Traceback (most recent call last):
File "E:\ProgramsPython\My\bayes\Coin Flip.py", line 22, in <module>
ylist = [coinFlip(x) for x in xlist]
File "E:\ProgramsPython\My\bayes\Coin Flip.py", line 16, in coinFlip
return heads / x
ZeroDivisionError: integer division or modulo by zero

这个错误是说你被零除了。所以有一条线,你可以分开,它可能在那里

在我看来,尝试将您的回报率改为这一点更有意义:

return heads / size
x可以等于零。当这种情况发生时,特别是调用coinFlip1时

heads / x
引发零错误

顺便说一下,因为您使用的是matplotlib,所以必须安装NumPy。因此,您可以这样使用express coinFlip:

import matplotlib.pyplot as plt
import numpy as np

def coinFlip(size):
    flips = np.random.randint(0, 2, size=size)
    return flips.mean()
coinFlip = np.frompyfunc(coinFlip, 1, 1)

xmin, xmax, dx = 1, 500, 1
x = np.arange(xmin, xmax, dx)
y = coinFlip(x)
plt.plot(x, y)
plt.show()
或者使用@pjs的评论,查看在一次500次硬币投掷中头部的比例是如何变化的:

def coinFlip(size):
    xmin, xmax, dx = 1, size, 1
    x = np.arange(xmin, xmax, dx)
    flips = np.random.randint(0, 2, size=size)
    return x, [flips[:i].mean() for i in x]

x, y = coinFlip(500)
plt.plot(x, y)
要在对数刻度上绘制x轴,请执行以下操作:

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xscale('log')
你需要按大小划分头部

为了避免截断,它可能应该是

     return heads / float(size)
排队的时候 返回头/x
最后一次运行时,x为0,因此创建了零除错误。

如果这样做,请不要忘记确保大小不是0。根据OP代码的其余部分,大小不会是0,而是介于1和500之间。但是,除了所有关于除以零的反馈之外,执行某种检查可能是一种很好的做法,我不确定你是否在做要求你做的事情。当你运行这个程序时,它将根据不同的样本大小绘制500个独立的采样结果。在一个500次抛硬币的实验中,运行比例应该绘制出每次额外抛硬币的比例变化。谢谢,这是我真正想要的。还有一个问题,我如何在对数尺度上绘制x轴,这样我就可以看到前几次翻转的细节,以及多次翻转后的长期趋势?
import numpy as np
from matplotlib import pyplot as plt

flips = np.random.binomial(1, 0.5, 500) # flip 1 coin with 0.5 prob of heads 500 times
heads_so_far = flips.cumsum() * 1.0 #lets use float to avoid truncations later
heads_to_count = [heads_so_far[i-1]/i for i in range(1,len(flips)+1)]
x = range(1,len(flips)+1)
plt.plot(x,heads_to_count)
plt.show()
     return heads / float(size)
import numpy as np
from matplotlib import pyplot as plt

flips = np.random.binomial(1, 0.5, 500) # flip 1 coin with 0.5 prob of heads 500 times
heads_so_far = flips.cumsum() * 1.0 #lets use float to avoid truncations later
heads_to_count = [heads_so_far[i-1]/i for i in range(1,len(flips)+1)]
x = range(1,len(flips)+1)
plt.plot(x,heads_to_count)
plt.show()