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实现读取命令行参数的方法
May 22 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
python matplotlib实现双Y轴的实例
Feb 12 Python
python实现移位加密和解密
Mar 22 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
django框架自定义模板标签(template tag)操作示例
Jun 24 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
python 下载m3u8视频的示例代码
Nov 11 Python
浅谈Python项目的服务器部署
Apr 25 Python
django 认证类配置实现
Nov 11 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中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
Python编写Windows Service服务程序
2018/01/04 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
解决Python使用列表副本的问题
2019/12/19 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
python 自动识别并连接串口的实现
2021/01/19 Python
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
给物业的表扬信
2014/01/21 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
环保倡议书300字
2014/05/15 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
简单租房协议书范本
2014/08/20 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
导游词之镜泊湖
2019/12/09 职场文书
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python
Python数组变形的几种实现方法
2022/05/30 Python