PYTHON基础:python-plotly模拟随机过程

python-plotly模拟掷骰子随机过程

虽然投掷骰子看起来是随机事件,但只要使用正确的算法进行模拟,实际上它可以被精确地预测和分析。在数学领域,人们常常使用概率论和统计学知识来解释各种随机事件的规律和特征。而在赌场等场合,骰子的投掷也是一种常见的随机事件,因此可以利用 Python 编写代码来模拟这些事件,并通过数据可视化的方式反映结果。

例如,可以编写一个模拟骰子投掷的程序,其中包含一个随机数生成器来模拟骰子的点数,并对多次重复投掷进行统计和可视化。通过这种方式,可以了解不同点数出现的概率、投掷次数与结果之间的关系,以及多次投掷后的结果分布等信息。

除了投掷骰子,类似的方法也可以应用于其他随机事件的模拟和分析,如卡牌游戏的洗牌和发牌、股票价格的波动、气象数据的预测等等。通过使用 Python 的数据分析和可视化工具,可以更好地理解随机事件的规律和特征,为实际应用提供有力支持。

投掷一个骰子

先单独创建一个文件die.py来存储第一个类,我们用它来产生随机数

from random import randint#引用随机模块
class Die:
    """一个骰子的数的类"""
    
    def __init__(self, num_sides=6):
        """一个骰子是六个面的,所以为6"""
        self.num_sides = num_sides
        
    def roll(self):
        """"随机在16间去一个数返回"""
        return randint(1, self.num_sides)

做好类后,我们再创建另一个文件,名字可以任意起。

from plotly.graph_objs import Bar, Layout
from plotly import offline

from die import Die

#首先要把骰子调动过来
die = Die()

# 用一个列表来存储数据
results = []
for roll_num in range(1000):
#循环产生1000个数==投掷1000
    result = die.roll()
    results.append(result)#把数据放入列表
    
# 分析结果
frequencies = []#空列表来存储点数出现的个数
for value in range(1, die.num_sides+1):
#遍历可能的点数,这里的点数是1-6
    frequency = results.count(value)
    frequencies.append(frequency)
    
# 对结果可视化
x_values = list(range(1, die.num_sides+1))
#这里要注意用list把函数range的结果转化成列表,因为plotly不能直接接受range的结果
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': 'Result'}
y_axis_config = {'title': 'Frequency of Result'}
my_layout = Layout(title='Results of rolling one D6 1000 times',
        xaxis=x_axis_config, yaxis=y_axis_config)
#坐标轴是不固定的在用不同的方式配置,用类layout可以指定一个布局和配置对象
offline.plot({'data': data, 'layout': my_layout}, filename='jie_guo')
#调用一个offline.plot,这个需要一个数据和字典加文件名,文件名是保存的图像的文件名

运行程序会自动生成一个html文件,并在浏览器里面打开,这个就是我们模拟出来的结果图像
在这里插入图片描述

投掷两个骰子

如果同时投掷两个骰子,并且求他们点数总和又是怎么做呢?
我们只需要修改前面的代码就可以了

from plotly.graph_objs import Bar, Layout
from plotly import offline

from die import Die

# 这次我们创建两个骰子
die_1 = Die()
die_2 = Die()

# 把结果记录在列表中
results = []
for roll_num in range(1000):
    result = die_1.roll() + die_2.roll()
    results.append(result)
    
# 分析结果
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
#这里求两个骰子的总和
for value in range(2, max_result+1):
    frequency = results.count(value)
    frequencies.append(frequency)
    
# 数据可视化
x_values = list(range(2, max_result+1))
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': 'Result', 'dtick': 1}
y_axis_config = {'title': 'Frequency of Result'}
my_layout = Layout(title='Results of rolling two D6 dice 1000 times',
        xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d6.html')

最后模拟出来的结果是这样子的

在这里插入图片描述

同时投掷两个不同面的骰子

不如说我们投掷的骰子有一个是6面的。有一个是10面的,把它投掷到一定基数,结果会怎么样?我们还是基于上面的代码来看看

from plotly.graph_objs import Bar, Layout
from plotly import offline

from die import Die

#这里要特别注意下,因为是10个面了,我们输入的函数第二个就是10了
die_1 = Die()
die_2 = Die(10)

results = []
for roll_num in range(50_000):
    result = die_1.roll() + die_2.roll()
    results.append(result)
    

frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2, max_result+1):
    frequency = results.count(value)
    frequencies.append(frequency)
    
# 数据可视化
x_values = list(range(2, max_result+1))
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': 'Result', 'dtick': 1}
y_axis_config = {'title': 'Frequency of Result'}
my_layout = Layout(title='Results of rolling a D6 and a D10 50000 times',
        xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d10.html')

最后模拟出来的结果是这样子的

参考文献
python编程从入门到实践–埃里克.马瑟斯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/273759.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【教程】将Python转为C语言并编译生成二进制文件

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 本教程以DGL版本的GCN为例,其他也相似。 1、安装cython、gcc: sudo apt install cython gcc -y2、安装DGL、PyTorch: pip3 install torch torchvision torchaudio pip insta…

电商数据分析-03-电商数据采集

参考 最最最全数据仓库建设指南,速速收藏!! 第1章 数据仓库概念 数据仓库规划 1.1 数仓搭建 我们这里所说的数据仓库,是基于大数据体系的,里面包含标签类目,区别于传统的数据仓库。下面我们来将这张图分解…

信息网络协议基础-IPv6协议

文章目录 概述为什么引入IP服务模型IPv4的可扩展性问题解决方法***CIDR(Classless Inter-Domain Routing, 无类别域间寻路)前缀汇聚***前缀最长匹配***NAT(网络地址转换)存在的问题解决方案路由表配置***局限性IPv6协议头标IPv6地址表示前缀类型单播地址链路局部地址(Link-Loca…

元道经纬相机信息化赋能光伏电站运维管理

近年来,我国光伏产业高速发展,尤其以分布式光伏发电项目增长迅速,为更好服务新能源发电,大力推广电能替代。与此同时,电力企业亟需改变落后的管理模式,借助信息化软件提升管理效率。 为了进一步提升光伏电…

SpringBoot3 Web开发

注:SpringBoot的Web开发能力,由SpringMVC提供。 0. WebMvcAutoConfiguration原理 1. 生效条件 AutoConfiguration(after { DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,ValidationAutoConfiguration.class }) …

大创项目推荐 深度学习LSTM新冠数据预测

文章目录 0 前言1 课题简介2 预测算法2.1 Logistic回归模型2.2 基于动力学SEIR模型改进的SEITR模型2.3 LSTM神经网络模型 3 预测效果3.1 Logistic回归模型3.2 SEITR模型3.3 LSTM神经网络模型 4 结论5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 …

信号与线性系统翻转课堂笔记12——时域取样定理

信号与线性系统翻转课堂笔记12 The Flipped Classroom12 of Signals and Linear Systems 对应教材:《信号与线性系统分析(第五版)》高等教育出版社,吴大正著 一、要点 (1)了解信号取样的概念&#xff1…

医院云HIS系统源码,saas多医院版,适用于专科医院、集团医院、基层医院

医院云HIS系统源码,自主研发,自主版权,电子病历病历4级 系统概述: 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务,提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统…

9.传统的轨道画线算法(完成)

轨道画线分为以下步骤: 1.读取摄像头图片 2.图片灰度处理,截取轨道区域的图片 3.中值滤波处理,并区域取均值后做期望差的绝对值。本人通过一些轨道图片实验,用这种方法二值化得到的效果比caany算子等方法的效果好 4.二值化后再…

普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)

简介 实现跑马灯, 但一个个引脚的操作实在是有些繁琐, 本次使用GPIO_WritePin接口实现批量操作GPIO引脚实现LED跑马灯。电路原理图 LED灯电路 LED灯连接主控芯片引脚图 实现说明 stm32f1xx_hal_gpio.h 关于GPIO引脚的定义如下 /** defgroup GPIO_pins_define GPIO pins …

[Angular] 笔记 13:模板驱动表单 - 单选按钮

Radio Buttons (Template Driven Forms) Radio Button&#xff0c; input 元素类型全部为 radio&#xff0c;因为是单选&#xff0c;name 属性值必须相同。 pokemon-template-form.component.html: <form #form"ngForm">Pokemon Name:<input type"t…

2D transform 1-translate

移位&#xff1a;translate 缩放&#xff1a;scale 旋转&#xff1a;rotate 扭曲&#xff1a;skew <style>.outer {width: 200px;height: 200px;border: 2px solid black;margin-top: 100px;}.inner {width: 200px;height: 200px;background-color: pink;transform: t…

使用web_video_server进行网页段的视频传输

引言&#xff1a;在项目中&#xff0c;需要实现无人机摄像头采集到的图像回传到window下进行查看&#xff0c;为此&#xff0c;选择使用web_video_server功能包实现局域网下的图像传输 硬件环境&#xff1a; 硬件&#xff1a;Jetson orin nano 8G D435摄像头 环境&#xff…

vue3+elementPlus+cascader动态加载封装自定义组件+v-model指令实现父子通信

文章目录 select普通操作 &#xff08;1&#xff09;cascader操作&#xff08;2&#xff09; select普通操作 &#xff08;1&#xff09; 搜索条件需求&#xff1a;接口入参需要houseId&#xff0c;但是要先选择完楼栋&#xff0c;再选择单元&#xff0c;最后选择房屋 如图&a…

k8s的二进制部署(一)

k8s的二进制部署&#xff1a;源码包部署 环境&#xff1a; k8smaster01: 20.0.0.71 kube-apiserver kube-controller-manager kube-schedule ETCD k8smaster02: 20.0.0.72 kube-apiserver kube-controller-manager kube-schedule Node节点01: 20.0.0.73 kubelet kube-pr…

GrayLog日志平台的基本使用-ssh接入Dashboards展示

这里使用的版本为graylog4.2.10 1、一键安装graylog4.2.10&#xff0c;解压zip包&#xff0c;执行脚本就行 链接&#xff1a;https://pan.baidu.com/s/11U7GpBZ1B7PXR8pyWVcHNw?pwdudln 提取码&#xff1a;udln 2、通过rsyslog采集系统日志&#xff0c;具体操作参考前面文…

饮用水中的砷、硝酸盐含量超标,离子交换工艺分享

随着人们对健康和生活质量的日益关注&#xff0c;饮用水安全问题成为了社会关注的焦点。在自然水体中的含量往往较高&#xff0c;而这些物质对人体健康存在一定的潜在风险。因此&#xff0c;饮用水处理中如何有效去除溴酸盐和硝酸盐&#xff0c;成为了当前水处理行业的重要课题…

CTFshow-pwn入门-栈溢出pwn39-pwn40

pwn39 首先我们还是先将二级制文件托到虚拟机里面查看文件的保护信息。 chmod x pwn checksec pwn文件依然是只开启了栈不可执行&#xff0c;canary和pie都没开。并且该文件是32位的&#xff0c;那我们就托到ida32中反编译一下吧。 int __cdecl main(int argc, const char **…

LSTM的记忆能力实验 [HBU]

目录 模型构建 LSTM层 模型训练 多组训练 模型评价 模型在不同长度的数据集上的准确率变化图 模型汇总 总结 长短期记忆网络&#xff08;Long Short-Term Memory Network&#xff0c;LSTM&#xff09;是一种可以有效缓解长程依赖问题的循环神经网络&#xff0e;LSTM 的…

go 源码解读 - sync.Mutex

sync.Mutex mutex简介mutex 方法源码标志位获取锁LocklockSlowUnlock怎么 调度 goroutineruntime 方法 mutex简介 mutex 是 一种实现互斥的同步原语。&#xff08;go-version 1.21&#xff09; &#xff08;还涉及到Go运行时的内部机制&#xff09;mutex 方法 Lock() 方法用于…
最新文章