python实现蒙特卡罗方法(代码示例)


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于python实现蒙特卡罗方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

蒙特卡罗方法是一种统计模拟方法,由冯·诺依曼和乌拉姆提出,在大量的随机数下,根据概率估计结果,随机数据越多,获得的结果越精确。下面我们将用python实现蒙特卡罗方法。

1.首先我们做一个简单的圆周率的近似计算,在这个过程中我们要用到随机数,因此需要先使用import numpy as np导入numpy库。

2.代码实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

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个随机数进行投放,这样得到的结果会更精确一些,运行程序需要一定的时间,最终得到的结果如下

2245034134-5c3b2a9a7b86b_articlex.png

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

961324965-5c3b2a9a367b6_articlex.png

5.上面的图形是不规则的,我们只需知道在投放大量随机数的情况下,随机数在黑色部分出现的概率,再用总面积相乘即可估算黑色部分的面积。我们知道,黑色的rgb编码为(0,0,0),所以需要统计rgb编码为(0,0,0)时随机数的投放概率即可。

6.代码实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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

3805107278-5c3b2a9a6b5e2_articlex.png

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

以上就是python实现蒙特卡罗方法(代码示例)的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python pycurl验证basic和digest认证的方法

Python怎么打包apk

Python如何实现网络爬虫

使用Python操作mysql的一个实例

Python中if语句用法

Python基础知识之二:网络通信数据传输

Python在普通工作中的应用有那些

Python中可迭代对象分解为单独的变量的实现方法(代码)

Python是面向对象还是面向过程的

Python中def是什么意思

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...