python蒙特卡洛方法圆周率_python实现蒙特卡罗方法教程
蒙特卡罗方法是一种统计模拟方法,由冯·诺依曼和乌拉姆提出,在大量的随机数下,根据概率估计结果,随机数据越多,获得的结果越精确。下面我们将用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蒙特卡洛方法圆周率_python实现蒙特卡罗方法教程相关推荐
- 蒙特卡洛python求解派_Python实现蒙特卡罗方法
一.蒙特卡罗方法简介 蒙特卡罗(Monte Carlo)方法:简单来说,蒙特卡洛的基本原理简单描述是先大量模拟,然后计算一个事件发生的次数,再通过这个发生次数除以总模拟次数,得到想要的结果,精髓就是: ...
- python 蒙特卡罗_python实现蒙特卡罗方法教程
蒙特卡罗方法是一种统计模拟方法,由冯·诺依曼和乌拉姆提出,在大量的随机数下,根据概率估计结果,随机数据越多,获得的结果越精确.下面我们将用python实现蒙特卡罗方法. 1.首先我们做一个简单的圆周率 ...
- python安装random库_python 库安装方法及常用库
python库安装方法: 方法一:setpu.py 1.下载库压缩包,解压,记录下路径:*:/**/--/ 2.运行cmd,切换到*:/**/--/目录下 3.运行setup.py build 4.然 ...
- python定义一个数组_Python数组定义方法
本文实例讲述了Python数组定义方法.分享给大家供大家参考,具体如下: Python中没有数组的数据结构,但列表很像数组,如: a=[0,1,2] 这时:a[0]=0, a[1]=1, a[[2]= ...
- python中sorted用法_Python中sorted()方法的用法
1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对iterable的解释是:iteralbe指的是能够一次返回它的一个成员的对象.iterable主要包括3类: 第一类是所有 ...
- python re库安装_python 库安装方法及常用库
python库安装方法: 方法一:setpu.py 1.下载库压缩包,解压,记录下路径:*:/**/--/ 2.运行cmd,切换到*:/**/--/目录下 3.运行setup.py build 4.然 ...
- python中clock函数_Python time clock()方法
Python time clock()方法 描述 Python 3.8 已移除 clock() 方法 可以使用 time.perf_counter() 或 time.process_time() 方法 ...
- 计算统计-Chap6 推断统计的蒙特卡罗方法 (3)蒙特卡罗方法
很多时候,我们不清楚统计量的分布,或不确定对它所作的假设是否合理.蒙特卡罗模拟可以处理这些情况,它的应用包括: 1)当待检测统计量(the test statistics)从未知时,进行推断 2)当参 ...
- python isnumeric函数用法_Python中isnumeric()方法的使用简介
Python中isnumeric()方法的使用简介 更新时间:2015年05月19日 09:35:06 投稿:goldensun 这篇文章主要介绍了Python中isnumeric()方法的使用,is ...
最新文章
- 【深度学习】拉格朗日( Lagrange)中值定理
- 使用JavaScript代码制作99乘法表
- The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
- com.android.phone已停止运行怎么解决方法,com.android.phone已停止运行怎么解决
- 无限式查找-----2013年2月28日
- 【二分图】【最大匹配】【匈牙利算法】CODEVS 2776 寻找代表元
- 6- vue django restful framework 打造生鲜超市 -完成商品列表页(下)
- ArcGIS Pro中的拓扑检查
- 基于聚类分析和因子分析的空气质量研究
- Java多线程系列--“JUC锁”03之 公平锁(一) (r)
- java最早的游戏_回忆S60(塞班)年代的JAVA游戏
- android程序毕业答辩ppt,软件毕业答辩PPT范例
- 解析java源文件_使用JDT.AST解析java源码
- 【安全防御】防火墙(二)
- android 检测软键盘,Android:检测软键盘打开
- IMP-00008错误
- 增强学习和OpeAI Gym的介绍:基础增强学习问题的演示
- 开始我的WebWork之旅
- 【秋招】秋招最全指南,如何准备,如何投递,以及面试攻略大全分享!
- 滴滴老年版来了,推出一键打车小程序,电话叫车服务
热门文章
- Unity Atlas
- python3画直方图出现“Polygon‘ object has no property ‘normed”
- 奋起之时,Ceph之父Sage Weil来华:产品化是唯一出路
- Kafka 的这些原理你知道吗
- JDK 的安装和配置(JDK 1.8)
- 物联网平台行业类型划分:CMP、DMP、AEP、BAP
- 什么是离散事件模拟(DES)
- golang的个人学习笔记以及错题集
- 多光纤推接 (MPO) 连接器
- table 中的col和colgroup