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使用os模块的os.walk遍历文件夹示例
Jan 27 Python
Python格式化压缩后的JS文件的方法
Mar 05 Python
python获取list下标及其值的简单方法
Sep 12 Python
用Python实现KNN分类算法
Dec 22 Python
python实现对csv文件的列的内容读取
Jul 04 Python
解决python opencv无法显示图片的问题
Oct 28 Python
python游戏地图最短路径求解
Jan 16 Python
django富文本编辑器的实现示例
Apr 10 Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
DRF框架API版本管理实现方法解析
Aug 21 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/09/16 PHP
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
Python学习笔记(二)基础语法
2014/06/06 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
自我评价200字分享
2013/12/17 职场文书
六年级数学教学反思
2014/02/03 职场文书
初级会计求职信范文
2014/02/15 职场文书
幼儿园见习报告
2014/10/30 职场文书
MySQL数据管理操作示例讲解
2022/12/24 MySQL