其他分享
首页 > 其他分享> > 蒙特卡罗方法(Monte Carlo)

蒙特卡罗方法(Monte Carlo)

作者:互联网

蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法,是一个统称,很多方法可以归类于蒙特卡罗方法

Monte Carlo 不是“蒙特卡罗”发明的,它是地名,是摩纳哥一个小城,以赌闻名,号称“赌博之国”,它是由冯诺依曼,乌拉姆等人发明的

比较

相关方法

工作原理

(1) 圆周率Π值求解

python代码

import random

total = [10, 100, 1000, 10000, 100000, 500000]  # 随着随即点数增大,越接近精确值

for cnt in total:
    in_count = 0
    for i in range(cnt):
        x = random.random()  # 返回随机生成的一个实数,它在[0,1)范围内
        y = random.random()
    
        dis = (x**2 + y**2)**0.5
    
        if dis <= 1:
            in_count += 1
        
    print(cnt, '个随机点,Π是: ', 4 * in_count / cnt)

(2) 计算不规则图形面积
比如下面这张黑底图片,想要计算图中白色图形的面积,其中图形都是不规则图形,我们没办法通过边长公式等进行计算,其中一种方法就是可以通过蒙特卡罗方法,向图上随机打点,然后获取像素点所在的颜色,白色面积=白色点数/总点数×图片总面积(当然其实可以用计算机遍历所有像素点也可以求,但这里主要用来说明蒙特卡罗思想的方法)

命名为exp_img.png

python代码

import cv2
import random
img = cv2.imread('C:/Users/fly tree/Desktop/exp_img.png')  # 读取图片,这里是绝对路劲
Width, Height = img.shape[:2]
total = [10, 100, 1000, 10000, 100000, 500000]  # 随即点数
# print(dir(img))

for cnt in total:
    in_count = 0
    for i in range(cnt):
        x = random.randint(0, Width-1)
        y = random.randint(0, Height-1)
        if img[x][y][0] == 255 and img[x][y][1] == 255 and img[x][y][2] == 255:
            in_count += 1
    print(cnt,'个随机点,白色面积为: ', Width * Height * in_count // cnt)

参考资料:
【智源学院】30分钟了解蒙特卡罗方法-有意思专题系列(蒙特卡洛方法)(Monte Carlo method)

标签:Monte,img,方法,random,cnt,蒙特卡罗,Carlo
来源: https://blog.csdn.net/weixin_45771864/article/details/117149527