首页 > 代码库 > python实现简单随机模拟——抛呀抛硬币
python实现简单随机模拟——抛呀抛硬币
还是在上次提到的数据之魅那本书,看到模拟这章,有个python模拟脚本,但书上不全,就自己简单写了下。
流程:在不同的平衡参数p(为0.5时为均匀的)下,模拟60次实验,每次投硬币8次,统计正面朝上的次数,并作图。
import randomimport matplotlib.pyplot as pltrepeats, tosses = 60, 8# p为平衡参数,tosses为每次重复试验中投掷硬币的次数# 返回当前平衡参数p的情况下,8次实验中正面的次数def heads(tosses, p): h = 0 for x in range(0, tosses): if random.random() < p: h += 1 return hx = [] # 存放平衡参数py = [] # 存放每个p下,60次重复试验得到的h的值p = 0 # 初始化p,从0开始while p < 1.01: hh = [] for t in range(0, repeats): h = heads(tosses,p) # 添加微小抖动值,防止点的重叠 h += (random.random()/4)*random.choice([-1,1]) hh.append(h) #print(p,‘\t‘,heads(tosses,p)) y.append(hh) x.append(p) p += 0.05# 箭头标注p=0.5,即硬币平衡的点plt.plot(x,y,‘g^‘)plt.annotate(‘balence‘, xy=(0.5, 5), xytext=(0.15, 8), arrowprops=dict(facecolor=‘black‘, shrink=0.05), )plt.show()‘‘‘# 一次有意思的尝试...# 开始没做出理想的图,以为一个x,对应多个y没法画(其实就是忘记点的抖动)...# 这里循环plot也是可以实现的.for i in range(60): q = [] for n in range(len(y)): yn = y[n][i] q.append(yn) plt.plot(x,q,‘ro‘)‘‘‘
输出图形如下:
可以看到,在p=0.5,即硬币均匀的情况下,投掷后,硬币正面出现次数大部分在4的附近。
python实现简单随机模拟——抛呀抛硬币
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。