资讯专栏INFORMATION COLUMN

蒙特卡罗方法(python实现)

ranwu / 1113人阅读

摘要:代码实现在上面的程序中我们用个随机数进行投放,这样得到的结果会更精确一些,运行程序需要一定的时间,最终得到的结果如下下面我们进行一项简单的应用,下图为我在画图工具中随便画的一个图,我们可以用蒙特卡罗方法来估算图中黑色部分的面积。

蒙特卡罗方法是一种统计模拟方法,由冯·诺依曼和乌拉姆提出,在大量的随机数下,根据概率估计结果,随机数据越多,获得的结果越精确。下面我们将用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个随机数,可以看出两个输出结果相差并不大。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43001.html

相关文章

  • 『 Spark 』3. spark 编程模式

    摘要:基本编程模式里有两个很重要的概念一般简称为和,在上一篇文章中基本概念解析有讲到。可以说,和贯穿了的大部分生命周期,从的初始化,到数据的清洗,计算,到最后获取,展示结果。 写在前面 本系列是综合了自己在学习spark过程中的理解记录 + 对参考文章中的一些理解 + 个人实践spark过程中的一些心得而来。写这样一个系列仅仅是为了梳理个人学习spark的笔记记录,所以一切以能够理解为主,没...

    Donald 评论0 收藏0
  • 『 Spark 』3. spark 编程模式

    摘要:基本编程模式里有两个很重要的概念一般简称为和,在上一篇文章中基本概念解析有讲到。可以说,和贯穿了的大部分生命周期,从的初始化,到数据的清洗,计算,到最后获取,展示结果。 写在前面 本系列是综合了自己在学习spark过程中的理解记录 + 对参考文章中的一些理解 + 个人实践spark过程中的一些心得而来。写这样一个系列仅仅是为了梳理个人学习spark的笔记记录,所以一切以能够理解为主,没...

    崔晓明 评论0 收藏0
  • MIT经典计算机课程:计算思维及数据科学导论

    摘要:昨天,我们在农民自制黑科技无人驾驶拖拉机一文中提到,一位农民通过学习的计算机网络课程,成功开发出了无人驾驶拖拉机的故事。今天,我与大家分享这套课程的第二部分,也就是,课程名称叫作计算思维及数据科学导论,使用的授课语言同样是。 昨天,我们在农民自制黑科技:无人驾驶拖拉机一文中提到,一位农民通过学习MIT的计算机网络课程6.00.1x,成功开发出了无人驾驶拖拉机的故事。今天,我与大家分享这...

    anonymoussf 评论0 收藏0
  • 蠎周刊 2015 年度最赞

    摘要:蠎周刊年度最赞亲俺们又来回顾又一个伟大的年份儿包去年最受欢迎的文章和项目如果你错过了几期就这一期不会丢失最好的嗯哼还为你和你的准备了一批纪念裇从这儿获取任何时候如果想分享好物给大家在这儿提交喜欢我们收集的任何意见建议通过来吧原文 Title: 蠎周刊 2015 年度最赞Date: 2016-01-09 Tags: Weekly,Pycoder,Zh Slug: issue-198-to...

    young.li 评论0 收藏0
  • Python猫荐书系列:文也深度学习,理也深度学习

    摘要:本期猫荐书栏目系列之六,就以此为话题,推荐给大家两本书它们都叫深度学习,但是内容很不一样。事实上,第一本书被很多人誉为深度学习的圣经,知名度极高,有一个昵称叫作花书。 最近出了两件大新闻,相信大家可能有所耳闻。 我来当个播报员,给大家转述一下: 1、中国队在第 11 界罗马尼亚数学大师赛(RMM)中无缘金牌。该项赛事是三大国际赛事之一,被誉为中学奥数的最高难度。其中一道题,令中国队全军...

    suemi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<