python實(shí)現(xiàn)蒙特卡羅方法教程
蒙特卡羅方法是一種統(tǒng)計模擬方法,由馮·諾依曼和烏拉姆提出,在大量的隨機(jī)數(shù)下,根據(jù)概率估計結(jié)果,隨機(jī)數(shù)據(jù)越多,獲得的結(jié)果越精確。下面我們將用python實(shí)現(xiàn)蒙特卡羅方法。
1.首先我們做一個簡單的圓周率的近似計算,在這個過程中我們要用到隨機(jī)數(shù),因此需要先使用import numpy as np導(dǎo)入numpy庫。
2.代碼實(shí)現(xiàn):
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個隨機(jī)數(shù)進(jìn)行投放,這樣得到的結(jié)果會更精確一些,運(yùn)行程序需要一定的時間,最終得到的結(jié)果如下

4.下面我們進(jìn)行一項(xiàng)簡單的應(yīng)用,下圖為我在畫圖工具中隨便畫的一個圖,我們可以用蒙特卡羅方法來估算圖中黑色部分的面積。

5.上面的圖形是不規(guī)則的,我們只需知道在投放大量隨機(jī)數(shù)的情況下,隨機(jī)數(shù)在黑色部分出現(xiàn)的概率,再用總面積相乘即可估算黑色部分的面積。我們知道,黑色的rgb編碼為(0,0,0),所以需要統(tǒng)計rgb編碼為(0,0,0)時隨機(jī)數(shù)的投放概率即可。
6.代碼實(shí)現(xiàn):
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): #用遍歷獲得準(zhǔn)確值
for j in range(height):
k = im.getpixel((i, j))
if k[0] + k[1] + k[2] == 0:
defin += 1
print(defin)
上面的代碼可分為兩部分,第一個for后面是用蒙特卡羅方法獲得的面積的估計值,第二個for后面是用遍歷所有像素點(diǎn)的方法獲得的面積的精確值,獲得兩個輸出后進(jìn)行對比。

我們在上面的程序中采用了9000000個隨機(jī)數(shù),可以看出兩個輸出結(jié)果相差并不大。
相關(guān)文章
Python 利用Entrez庫篩選下載PubMed文獻(xiàn)摘要的示例
這篇文章主要介紹了Python 利用Entrez庫篩選下載PubMed文獻(xiàn)摘要的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11
Python光學(xué)仿真學(xué)習(xí)衍射算法初步理解
這篇文章主要為大家介紹了Python光學(xué)仿真學(xué)習(xí)中對衍射算法的初步理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
django admin實(shí)現(xiàn)動態(tài)多選框表單的示例代碼
借助django-admin,可以快速得到CRUD界面,但若需要創(chuàng)建多選標(biāo)簽字段時,需要對表單進(jìn)行調(diào)整,本文通過示例代碼給大家介紹django admin多選框表單的實(shí)現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧2021-05-05
Python實(shí)現(xiàn)線性插值和三次樣條插值的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)線性插值和三次樣條插值的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Python ATM功能實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Python ATM功能實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
將django項(xiàng)目部署到centos的踩坑實(shí)戰(zhàn)
Django部署到Cenos需要安裝大量的依賴包, 有很多坑需要踩,這篇文章主要給大家介紹了關(guān)于將django項(xiàng)目部署到centos踩坑的相關(guān)資料,需要的朋友可以參考下2021-07-07

