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 基础知识之字符串处理
Jan 06 Python
Python科学计算之NumPy入门教程
Jan 15 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
python类共享变量操作
Sep 03 Python
python如何调用php文件中的函数详解
Dec 29 Python
python Tkinter的简单入门教程
Apr 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
smarty获得当前url的方法分享
2014/02/14 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
php实现的双向队列类实例
2014/09/24 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
利用python获得时间的实例说明
2013/03/25 Python
Python的时间模块datetime详解
2017/04/17 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
python实现微信自动回复功能
2018/04/11 Python
简单谈谈python基本数据类型
2018/09/26 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
中国梦演讲稿开场白
2014/08/28 职场文书
先进事迹演讲稿
2014/09/01 职场文书
2014年评职称工作总结
2014/11/20 职场文书
大学教师个人总结
2015/02/10 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python