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实现tcp自动重连
Jul 02 Python
python的mysqldb安装步骤详解
Aug 14 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
详解pandas安装若干异常及解决方案总结
Jan 10 Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 Python
pyqt5之将textBrowser的内容写入txt文档的方法
Jun 21 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
python3爬虫中多线程的优势总结
Nov 24 Python
Python连续赋值需要注意的一些问题
Jun 03 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变量存储的详解
2013/06/13 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
JS实现随机点名器
2020/04/12 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
python实现dict版图遍历示例
2014/02/19 Python
python定时执行指定函数的方法
2015/05/27 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
python 自动重连wifi windows的方法
2018/12/18 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
国际象棋商店:The Chess Store
2018/07/09 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
物业管理毕业生的自我评价
2014/02/17 职场文书
公休请假条
2014/04/11 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
公司催款律师函
2015/05/27 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android