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大批量寫入數(shù)據(jù)(百萬級別)的方法
這篇文章主要給大家介紹了關(guān)于Python大批量寫入數(shù)據(jù)(百萬級別)的相關(guān)資料,在日常處理數(shù)據(jù)的過程中,我們都有批量寫入數(shù)據(jù)的需求,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下2023-07-07
一行Python代碼實(shí)現(xiàn)為圖片上版權(quán)
不知道大家會不會遇到這樣的情況,自己辛辛苦苦整理的攻略,分享給自己的一些朋友,結(jié)果分享有人堂而皇之地拿著這份攻略圖片去引流,并聲稱是自己整理的,真是豈有此理!本文就來用Python實(shí)現(xiàn)為圖片上版權(quán),需要的可以參考一下2023-01-01
python進(jìn)階學(xué)習(xí)實(shí)時目標(biāo)跟蹤示例詳解
這篇文章主要為大家介紹了python進(jìn)階學(xué)習(xí)實(shí)時目標(biāo)跟蹤示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Python實(shí)現(xiàn)字符串中某個字母的替代功能
小編想實(shí)現(xiàn)這樣一個功能:將輸入字符串中的字母 “i” 變成字母 “p”。想著很簡單,怎么實(shí)現(xiàn)呢?下面小編給大家?guī)砹薖ython實(shí)現(xiàn)字符串中某個字母的替代功能,感興趣的朋友一起看看吧2019-10-10

