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爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 Python
Python基于scrapy采集数据时使用代理服务器的方法
Apr 16 Python
python中lambda与def用法对比实例分析
Apr 30 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
Python列表切片用法示例
Apr 19 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
Python实现的文本对比报告生成工具示例
May 22 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
django之导入并执行自定义的函数模块图解
Apr 01 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
php基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
sphinx增量索引的一个问题
2011/06/14 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
应聘面试自我评价
2014/01/24 职场文书
大课间活动实施方案
2014/03/06 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
个人租房协议书范本
2014/09/30 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
销售经理工作检讨书
2015/02/19 职场文书
给下属加薪申请报告
2015/05/15 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery