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通过websocket与js客户端通信示例分析
Jun 25 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
Python实现修改文件内容的方法分析
Mar 25 Python
python中的decorator的作用详解
Jul 26 Python
详解Python字典小结
Oct 20 Python
详解python使用turtle库来画一朵花
Mar 21 Python
一文秒懂python读写csv xml json文件各种骚操作
Jul 04 Python
django url到views参数传递的实例
Jul 19 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
python 如何将office文件转换为PDF
Sep 22 Python
pandas针对excel处理的实现
Jan 15 Python
Python入门学习之类的相关知识总结
May 25 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 UTF8编码内的繁简转换类
2009/07/20 PHP
PHP句法规则详解 入门学习
2011/11/09 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
jQuery之折叠面板的深入解析
2013/06/19 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
python3生成随机数实例
2014/10/20 Python
用python实现百度翻译的示例代码
2018/03/09 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python实现代码统计器
2019/09/19 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
竞聘上岗演讲稿范文
2014/01/10 职场文书
不假外出检讨书
2014/01/27 职场文书
学生检讨书范文
2015/01/27 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书