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通过imaplib模块读取gmail里邮件的方法
May 08 Python
Python中的深拷贝和浅拷贝详解
Jun 03 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
python中for用来遍历range函数的方法
Jun 08 Python
python得到单词模式的示例
Oct 15 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
python简单区块链模拟详解
Jul 03 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
python爬虫基础知识点整理
Jun 02 Python
Python reques接口测试框架实现代码
Jul 28 Python
Sentry错误日志监控使用方法解析
Nov 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 array_merge下进行数组合并的代码
2008/07/22 PHP
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
php实现httpclient类示例
2014/04/08 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
vue组件间通信解析
2017/03/01 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
python概率计算器实例分析
2015/03/25 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
2015/04/28 Python
Python正则表达式使用经典实例
2016/06/21 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
python实现代码统计程序
2019/09/19 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
人事部岗位职责范本
2014/03/05 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
师德演讲稿范文
2014/05/06 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书