当前位置:首页 > 天道酬勤 > 正文内容

python按键事件(python监听事件)

张世龙2021年12月22日 06:48天道酬勤600

模拟效果:

实验模拟效果

频率的定义

fn(a )=nA/n(n ) n称为随机实验的总次数,nA称为事件a在n次随机实验中发生的次数(度数) ),fn ) a称为在这n次实验中a发生的频率。

频率是0到1之间的实数。 需要在大量重复实验的基础上,只展示随机事件发生的可能性。 观察

利用python模拟抛硬币和掷骰子实验

硬币在不同实验次数出现正面的概率,观察筛子在不同实验次数出现1、2点的概率。 各实验分为8组进行,分别统计5次实验、50次实验、500次实验的概率值制作1~2000次2种实验的散点图

模拟的思想

, 利用python随机库(random )构建Chooon随机生成器,生成实验概率

构造一个随机实验函数

defsy (空间、组、A_list、 n )进行分组,主要从样本空间列表space中随机获取一个样本点,判断是否在用if else统计的事件A_list列表中,最后根据事件a在n次实验中出现的次数得出概率。 组是组数。

深度(空格,组,a _列表,n ) :

''''

这是一个随机的实验函数。

space是随机事件的样本空间,包括所有样本点

组是需要分组的次数

A_list是发生了a事件的采样点的列表

n是这次实验的重复次数

''''

result_now=[] #保存本次的实验结果

财富(组) :

“”进行分组实验“”

SA=0 #最初的a事件的发生次数

财富:

“”每组进行n次实验“”

sa=1ifRandom.choice(space ) in A_list else 0 # A事件的发生频率增加1

result_now.append(round(sa/n,4 ) )在当前团队完成实验后,将频率统计存储到变量中

return result _ now

构造一个重复实验函数

进行基于def re _ sy (r_n,空格,组,A_list )函数控制的不同重复输出的实验r _ n是进行重复实验的次数的列表在本论文中,r _ n=[ 5,50,500 ]

defre_sy(r_n、空间、组、A_list ) :

重复“”随机实验“”

结果=]

n :之内

result.append (sy (空间,组,A_list,n ) )

return result

构造一个结果输出函数

都是简单的字符串打印输出,没什么好说的。 只说明result反复进行实验的结果,收纳了2维列表。

def打印_ sy (a _列表,r_n,组,结果) :

“”将实验结果打印到控制台“”

“控制台输出打印”

title='这是观察' {} '的出现频率的随机实验'.format ','.join(a_list ) '

打印(标题中心(50,' * ' )

打印('组\t\t ',结束=' ' )

n :之内

打印(重复(次(t ) .格式) n ),结束=) )

print () )

财富(组) :

打印(组(t ) .格式) j1 ),结束=' )

财富(len ) ) :

打印({ :4 f } (t ) .格式)结果[ I ] [ j ],结束=' )

设定print(

构造硬币实验函数

参数,开始实验

def coin_main () :

r_n=[5、50、500]#设定不同的实验次数

= 8 # 设置分组参数 coin = ["正面", "反面"] # 用列表模拟一颗硬币 A_list = ["正面"] # 设置要观测的样本点 coin_sy = re_sy(r_n, coin, group, A_list)# 进行实验 print_sy(A_list, r_n, group, coin_sy)# 输出结果

开始硬币实验

random.seed(5)#设置随机数种子,方便以后重复实验过程,若不设置每次实验结果不相同 coin_main()

构造掷骰子实验函数

直接修改参数,就可以得到掷骰子实验的代码,非常简单

def dice_main(): r_n = [5, 50, 500] # 设置不同的实验次数 group = 8 # 设置分组参数 dice = ["1", "2", "3", "4", "5", "6"] # 用列表模拟一颗硬币 A_list = ["1", "2"] # 设置要观测的样本点 dice_sy = re_sy(r_n, dice, group, A_list) print_sy(A_list, r_n, group, dice_sy)

开始掷骰子实验

random.seed(5) # 设置随机数种子,方便以后重复实验过程,若不设置每次实验结果不相同 dice_main()

掷骰子实验出现1、2的概率

绘制1~2000次实验的散点图

可以利用matplotlib库绘制,代码比较简单,都备注相应的注释。

import matplotlib.pyplot as plt import numpy as np '''绘制随机实验n与p(A)的散点图''' max_n = 2000 # 设置最大实验次数 n = [] PA_coin = [] PA_dice = [] for i in range(max_n): n.append(i + 1) PA_coin.append(sy(["正面", "反面"], 1, ["正面"], i + 1)[0]) # 进行实验 PA_dice.append(sy(["1", "2", "3", "4", "5", "6"], 1, ["1", "2"], i + 1)[0]) # 进行实验 n = np.array(n) PA_coin = np.array(PA_coin) PA_dice = np.array(PA_dice) '''绘图开始''' fig = plt.figure() # 创建画图窗口 ax1 = fig.add_subplot(2, 1, 1) # 将窗口划分为2行一列,选择第一块区域画图 ax1.set_title("coin") # 设置图标的标题 ax1.set_xlabel('n') # 设置x轴标签 ax1.set_ylabel('P(A)') # 设置y轴标签 ax1.scatter(n, PA_coin) # 绘制散点图 ax1.plot(n, np.array([0.5] * 2000), c='b', ls='--') # 绘制理论概率线 ax2 = fig.add_subplot(2, 1, 2) # 将窗口划分为2行一列,选择第二块区域画图 ax2.set_title("dice") ax2.set_xlabel('n') ax2.set_ylabel('P(A)') ax2.scatter(n, PA_dice) ax2.plot(n, np.array([0.33] * 2000), c='b', ls='--') # 绘制理论概率线 plt.show()

绘图效果

结论

通过实验可以看到当实验次数少的时候,随机事件发生的概率规律变化波动大而随着实验次数增加实际观察概率逐渐向理论概率收敛。

本实验案例的全部代码

import random import matplotlib.font_manager def sy(space, group, A_list, n): ''' 这是一个随机实验函数, space为随机事件样本空间,包括所有的样本点 group是需要分组的次数 A_list是A事件发生的样本点列表 n是本次实验重复的次数 ''' result_now = [] # 存放当次实验结果 for g in range(group): '''进行分组实验''' SA = 0 # 初始A事件出现次数 for i in range(n): '''每小组进行n次实验''' SA += 1 if random.choice(space) in A_list else 0 # A事件出现频数增加1 result_now.append(round(SA / n, 4)) # 当前小组完成实验后将频率统计数存入变量中 return result_now def re_sy(r_n, space, group, A_list): '''进行重复随机实验''' result = [] for n in r_n: result.append(sy(space, group, A_list, n)) return result def print_sy(A_list, r_n, group, result): '''将实验结果打印到控制台''' '''控制台输出打印''' title = "这是观察'{}'出现频率的随机实验".format("、".join(A_list)) print(title.center(50, "*")) print("小组\t\t", end="") for n in r_n: print("重复{}次\t".format(n), end="") print() for j in range(group): print("第{}组\t".format(j + 1), end="") for i in range(len(r_n)): print("{:.4f}\t".format(result[i][j]), end="") print() def coin_main(): r_n = [5, 50, 500] # 设置不同的实验次数 group = 8 # 设置分组参数 coin = ["正面", "反面"] # 用列表模拟一颗硬币 A_list = ["正面"] # 设置要观测的样本点 coin_sy = re_sy(r_n, coin, group, A_list) # 进行实验 print_sy(A_list, r_n, group, coin_sy) # 输出结果 def dice_main(): r_n = [5, 50, 500] # 设置不同的实验次数 group = 8 # 设置分组参数 dice = ["1", "2", "3", "4", "5", "6"] # 用列表模拟一颗硬币 A_list = ["1", "2"] # 设置要观测的样本点 dice_sy = re_sy(r_n, dice, group, A_list) print_sy(A_list, r_n, group, dice_sy) random.seed(5) # 设置随机数种子,方便以后重复实验过程,若不设置每次实验结果不相同 coin_main() dice_main() import matplotlib.pyplot as plt import numpy as np '''绘制随机实验n与p(A)的散点图''' max_n = 2000 # 设置最大实验次数 n = [] PA_coin = [] PA_dice = [] for i in range(max_n): n.append(i + 1) PA_coin.append(sy(["正面", "反面"], 1, ["正面"], i + 1)[0]) # 进行实验 PA_dice.append(sy(["1", "2", "3", "4", "5", "6"], 1, ["1", "2"], i + 1)[0]) # 进行实验 n = np.array(n) PA_coin = np.array(PA_coin) PA_dice = np.array(PA_dice) '''绘图开始''' fig = plt.figure() # 创建画图窗口 ax1 = fig.add_subplot(2, 1, 1) # 将窗口划分为2行一列,选择第一块区域画图 ax1.set_title("coin") # 设置图标的标题 ax1.set_xlabel('n') # 设置x轴标签 ax1.set_ylabel('P(A)') # 设置y轴标签 ax1.scatter(n, PA_coin) # 绘制散点图 ax1.plot(n, np.array([0.5] * 2000), c='b', ls='--') # 绘制理论概率线 ax2 = fig.add_subplot(2, 1, 2) # 将窗口划分为2行一列,选择第二块区域画图 ax2.set_title("dice") ax2.set_xlabel('n') ax2.set_ylabel('P(A)') ax2.scatter(n, PA_dice) ax2.plot(n, np.array([0.33] * 2000), c='b', ls='--') # 绘制理论概率线 plt.show()

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/26875.html

标签: arrowdice
分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。