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字符串切片操作知识详解
Mar 28 Python
Python中Threading用法详解
Dec 27 Python
高效使用Python字典的清单
Apr 04 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
Aug 16 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
Python补齐字符串长度的实例
Nov 15 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
django自带调试服务器的使用详解
Aug 29 Python
Django项目后台不挂断运行的方法
Aug 31 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
python生成大写32位uuid代码
Mar 03 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 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
8个出色的WordPress SEO插件收集
2011/02/26 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
python实现保存网页到本地示例
2014/03/16 Python
Python字典操作简明总结
2015/04/13 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
浅谈Python NLP入门教程
2017/12/25 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
医学检验专业大学生求职信
2013/11/18 职场文书
客户经理岗位职责
2013/12/08 职场文书
迷你西餐厅创业计划书范文
2013/12/31 职场文书
护士求职简历自我评价
2015/03/10 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
投资申请报告
2015/05/19 职场文书
oracle数据库去除重复数据
2022/05/20 Oracle