python实现蒙特卡罗方法教程

 更新时间:2019年01月28日 08:54:07   投稿:laozhang  
在本篇文章里小编给大家分享了关于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 中in 的 用法

    详解python 中in 的 用法

    in在Python中是操作符,具体来说是成员操作符。这篇文章主要介绍了python 中in 的 用法,需要的朋友可以参考下
    2019-12-12
  • Python大批量写入数据(百万级别)的方法

    Python大批量写入数据(百万级别)的方法

    这篇文章主要给大家介绍了关于Python大批量写入数据(百万级别)的相关资料,在日常处理数据的过程中,我们都有批量写入数据的需求,文中给出了详细的示例代码,需要的朋友可以参考下
    2023-07-07
  • 一行Python代码实现为图片上版权

    一行Python代码实现为图片上版权

    不知道大家会不会遇到这样的情况,自己辛辛苦苦整理的攻略,分享给自己的一些朋友,结果分享有人堂而皇之地拿着这份攻略图片去引流,并声称是自己整理的,真是岂有此理!本文就来用Python实现为图片上版权,需要的可以参考一下
    2023-01-01
  • Python如何重新加载模块

    Python如何重新加载模块

    这篇文章主要介绍了Python如何重新加载模块,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Python字典中的值求和两种方法

    Python字典中的值求和两种方法

    在Python中字典是一种无序的数据结构,它由一系列键和对应的值组成,有时候我们需要对字典中的键对应的值进行求和操作,这篇文章主要给大家介绍了关于Python字典中值求和两种方法的相关资料,需要的朋友可以参考下
    2023-11-11
  • python进阶学习实时目标跟踪示例详解

    python进阶学习实时目标跟踪示例详解

    这篇文章主要为大家介绍了python进阶学习实时目标跟踪示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • django创建css文件夹的具体方法

    django创建css文件夹的具体方法

    在本文里小编给大家总结的是关于django创建css文件夹的具体方法,对此有需要的朋友们参考下吧。
    2020-07-07
  • Python爬虫将爬取的图片写入world文档的方法

    Python爬虫将爬取的图片写入world文档的方法

    今天小编就为大家分享一篇Python爬虫将爬取的图片写入world文档的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python与C互相调用的方法详解

    python与C互相调用的方法详解

    这篇文章主要给大家介绍了关于python与C互相调用方法的相关资料,文中通过示例代码详细介绍了动用的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07
  • Python实现字符串中某个字母的替代功能

    Python实现字符串中某个字母的替代功能

    小编想实现这样一个功能:将输入字符串中的字母 “i” 变成字母 “p”。想着很简单,怎么实现呢?下面小编给大家带来了Python实现字符串中某个字母的替代功能,感兴趣的朋友一起看看吧
    2019-10-10

最新评论