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 相关文章推荐
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
Windows下PyMongo下载及安装教程
Apr 27 Python
Python中表示字符串的三种方法
Sep 06 Python
Python列表生成式与生成器操作示例
Aug 01 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 Python
django-rest-framework解析请求参数过程详解
Jul 18 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
python爬虫之利用selenium模块自动登录CSDN
Apr 22 Python
opencv 分类白天与夜景视频的方法
Jun 05 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP Session变量不能传送到下一页的解决方法
2009/11/27 PHP
php学习之变量的使用
2011/05/29 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
js实现文字截断功能
2016/09/14 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
itchat接口使用示例
2017/10/23 Python
python机器学习之随机森林(七)
2018/03/26 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
三个python爬虫项目实例代码
2019/12/28 Python
Python configparser模块常用方法解析
2020/05/22 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
竞选文艺委员演讲稿
2014/04/28 职场文书
支教个人总结
2015/03/04 职场文书
职工培训工作总结
2015/08/10 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书