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模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
Python中使用logging模块打印log日志详解
Apr 05 Python
Python合并多个装饰器小技巧
Apr 28 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
在Python中操作时间之tzset()方法的使用教程
May 22 Python
Python文件右键找不到IDLE打开项解决办法
Jun 08 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
Jun 07 Python
python监控文件并且发送告警邮件
Jun 21 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 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
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
广告显示判断
2006/08/31 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
js选项卡的制作方法
2017/01/23 Javascript
浅谈Vue.js
2017/03/02 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
用python实现的线程池实例代码
2018/01/06 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python实现画循环圆
2019/11/23 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
教育课题研究自我鉴定范文
2013/12/28 职场文书
学校安全检查制度
2014/01/27 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
党支部四风整改方案
2014/10/25 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL