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 18 Python
python中__slots__用法实例
Jun 04 Python
深入解析Python中的上下文管理器
Jun 28 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
Django框架实现逆向解析url的方法
Jul 04 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
Python中遍历列表的方法总结
Jun 27 Python
Python八皇后问题解答过程详解
Jul 29 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
tensorflow之自定义神经网络层实例
Feb 07 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
深入php self与$this的详解
2013/06/08 PHP
php 删除cookie方法详解
2014/12/01 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
jQuery 表单验证扩展(三)
2010/10/20 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
python生成随机红包的实例写法
2019/09/02 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
python小白学习包管理器pip安装
2020/06/09 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
高一数学教学反思
2014/02/07 职场文书
好人好事事迹材料
2014/02/12 职场文书
环保倡议书范文
2014/05/12 职场文书
经销商年会策划方案
2014/05/29 职场文书
禁毒宣传标语
2014/06/19 职场文书