python实现蒙特卡罗方法教程


Posted in Python onJanuary 28, 2019

蒙特卡罗方法是一种统计模拟方法,由冯·诺依曼和乌拉姆提出,在大量的随机数下,根据概率估计结果,随机数据越多,获得的结果越精确。下面我们将用python实现蒙特卡罗方法。

1.首先我们做一个简单的圆周率的近似计算,在这个过程中我们要用到随机数,因此需要先使用import numpy as np导入numpy库。

2.代码实现:

import numpy as np
 
total = 8000000
count = 0
 
for i in range(total):
 x = np.random.rand()
 y = np.random.rand()
 dis = (x**2+y**2)**0.5
 if dis <= 1:
  count = count+1
PI = 4*count/total
print(PI)

3.在上面的程序中我们用8000000个随机数进行投放,这样得到的结果会更精确一些,运行程序需要一定的时间,最终得到的结果如下

python实现蒙特卡罗方法教程

4.下面我们进行一项简单的应用,下图为我在画图工具中随便画的一个图,我们可以用蒙特卡罗方法来估算图中黑色部分的面积。

python实现蒙特卡罗方法教程

5.上面的图形是不规则的,我们只需知道在投放大量随机数的情况下,随机数在黑色部分出现的概率,再用总面积相乘即可估算黑色部分的面积。我们知道,黑色的rgb编码为(0,0,0),所以需要统计rgb编码为(0,0,0)时随机数的投放概率即可。

6.代码实现:

from PIL import Image
import numpy as np
 
im = Image.open("C:/Users/21974/Desktop/handwrite2.PNG")
total = 9000000
count = 0
defin = 0
width = im.size[0]
height = im.size[1]
 
for i in range(total): #用蒙特卡罗方法获得估计值
 x = np.random.randint(0, width-1)
 y = np.random.randint(0, height-1)
 k = im.getpixel((x, y))
 if k[0]+k[1]+k[2] == 0:
  count += 1
print(int(width*height*count/total))
 
for i in range(width): #用遍历获得准确值
 for j in range(height):
  k = im.getpixel((i, j))
  if k[0] + k[1] + k[2] == 0:
   defin += 1
print(defin)

上面的代码可分为两部分,第一个for后面是用蒙特卡罗方法获得的面积的估计值,第二个for后面是用遍历所有像素点的方法获得的面积的精确值,获得两个输出后进行对比。

python实现蒙特卡罗方法教程

我们在上面的程序中采用了9000000个随机数,可以看出两个输出结果相差并不大。

Python 相关文章推荐
Python 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
Python yield 使用浅析
May 28 Python
Python中的单继承与多继承实例分析
May 10 Python
linux下python使用sendmail发送邮件
May 22 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
Python实现登陆文件验证方法
Oct 06 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
python实现高斯判别分析算法的例子
Dec 09 Python
dpn网络的pytorch实现方式
Jan 14 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
浅谈Python类的单继承相关知识
May 12 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 #Python
python简单贪吃蛇开发
Jan 28 #Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 #Python
python使用正则筛选信用卡
Jan 27 #Python
pthon贪吃蛇游戏详细代码
Jan 27 #Python
只需7行Python代码玩转微信自动聊天
Jan 27 #Python
python实现贪吃蛇游戏
Mar 21 #Python
You might like
php学习之 数组声明
2011/06/09 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
28个JS验证函数收集
2010/03/02 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
关于TypeScript模块导入的那些事
2018/06/12 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
零基础学python应该从哪里入手
2020/08/11 Python
父母对孩子的寄语
2014/04/09 职场文书
贷款承诺书范文
2014/05/19 职场文书
涉外离婚协议书怎么写
2014/11/20 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
班级联欢会主持词
2015/07/03 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
企业愿景口号
2015/12/25 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python
阿里云日志过滤器配置日志服务
2022/04/09 Servers
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript