蒙特卡罗方法是一种统计模拟方法,由冯·诺依曼和乌拉姆提出,在大量的随机数下,根据概率估计结果,随机数据越多,获得的结果越精确。下面我们将用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个随机数进行投放,这样得到的结果会更精确一些,运行程序需要一定的时间,最终得到的结果如下

4.下面我们进行一项简单的应用,下图为我在画图工具中随便画的一个图,我们可以用蒙特卡罗方法来估算图中黑色部分的面积。

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后面是用遍历所有像素点的方法获得的面积的精确值,获得两个输出后进行对比。

我们在上面的程序中采用了9000000个随机数,可以看出两个输出结果相差并不大。

本文标题: python实现蒙特卡罗方法教程

本文地址: http://www.cppcns.com/jiaoben/python/251230.html

python 蒙特卡罗_python实现蒙特卡罗方法教程相关推荐

  1. doc python 颜色_Python wordcloud.ImageColorGenerator方法代码示例

    本文整理汇总了Python中wordcloud.ImageColorGenerator方法的典型用法代码示例.如果您正苦于以下问题:Python wordcloud.ImageColorGenerat ...

  2. python 计时_Python time clock()方法

    Python time clock()方法 描述 Python 3.8 已移除 clock() 方法 可以使用 time.perf_counter() 或 time.process_time() 方法 ...

  3. windows下运行python打印有颜色的字_Windows和Linux下Python输出彩色文字的方法教程...

    前言 最近在项目中需要输出彩色的文字来提醒用户,以前写过,但是只能在win上面运行. 今天搜了下看有没有在win和Linux上通用的输出彩色文字的模块,结果发现没有,,于是就自己弄了一个,分享下,以后 ...

  4. g的python实现_Python flask.g方法代码示例

    本文整理汇总了Python中flask.g方法的典型用法代码示例.如果您正苦于以下问题:Python flask.g方法的具体用法?Python flask.g怎么用?Python flask.g使用 ...

  5. python测量血压_python距离测量的方法

    之所以写这个,其实就是希望能对距离有一些概念,当然这个也是很基础的,不过千里之行始于足下嘛,各种路径算法,比如a*什么的都会用到这个 距离测量有三种方式 1.欧式距离,这个是最常用的距离测量方式 (( ...

  6. python rsa 公钥解密_python利用rsa库做公钥解密的方法教程

    前言 对于RSA的解密,即密文的数字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再对结果除以 N 求余数即可得到明文.D 和 N 的组合就是私钥(private key). 算法的加密 ...

  7. python爬虫登录教程_Python爬虫之模拟知乎登录的方法教程

    前言 对于经常写爬虫的大家都知道,有些页面在登录之前是被禁止抓取的,比如知乎的话题页面就要求用户登录才能访问,而 "登录" 离不开 HTTP 中的 Cookie 技术. 登录原理 ...

  8. 菜鸟教程python正则表达式_python 正则表达式详解

    python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...

  9. 基础阶段(六)——蒙特卡罗(MC)方法

    提示:转载请注明出处,若本文无意侵犯到您的合法权益,请及时与作者联系. 基础阶段(六)--蒙特卡罗(MC)方法 一.为什么要用蒙特卡罗方法? 1.1 为什么DP算法是一种基于模型的算法? 1.2 什么 ...

最新文章

  1. Nature:剖腹产到底好不好?——肠道菌群的视角
  2. Qt修炼手册2_动态设计
  3. codeforces B. High School: Become Human
  4. 大数据学习之Linux环境搭建(导航)
  5. 解决crontab 定时任务加载失败
  6. Github(4)-远程操作
  7. 正则表达式 -- 个人笔记
  8. 计算机视觉实战(十五)背景建模 (附完整代码)
  9. IDC:2021年云上数据量超过传统数据中心,All in Cloud是趋势
  10. h5 兑换商品 页面模版_H5商城静态页面(模板)
  11. AD637_高精度,宽带RMS-DC转换器
  12. 基于java的拼图游戏的设计与实现
  13. 使用kmean进行图像分割 使用CRFs进行分割后处理
  14. LEADTOOLS V20,史无前例荣耀归来!!!
  15. ffmpeg 多视频 画中画
  16. 常见的协议的协议号及端口
  17. 【系统之家首发】Ghost_Windows7_sp1_Ultimate_x86V2011.10.10 【OEM 通用版】Windows7旗舰版好人一个出品
  18. 【步态识别】GaitPart 算法学习《GaitPart: Temporal Part-based Model for Gait Recognition》
  19. Win10驱动安装失败:提示“数据无效”或“安装错误”或其它原因的解决方法
  20. message函数php,ReplyMessage()函数

热门文章

  1. SAMSUNG S3C2440的简易BootLoader ㈢
  2. wamp打开php,wamp本地php环境开启GD库教程
  3. mac markdown_适用于Mac的最佳Markdown编辑器
  4. ECB(实体边界控制)模式
  5. 实现移动端查看控制台
  6. 公司章程违反了公司法该怎么办
  7. 当 Python 遇到数据库,这个模块就变得超级好用
  8. matlab回车键,在Matlab中启动.exe文件后,以编程方式按一下回车键
  9. 支理解SVM的三层境界
  10. 【开发经验】md自动上传图片