python實(shí)現(xiàn)蒙特卡羅方法教程
蒙特卡羅方法是一種統(tǒng)計(jì)模擬方法,由馮·諾依曼和烏拉姆提出,在大量的隨機(jī)數(shù)下,根據(jù)概率估計(jì)結(jié)果,隨機(jī)數(shù)據(jù)越多,獲得的結(jié)果越精確。下面我們將用python實(shí)現(xiàn)蒙特卡羅方法。
1.首先我們做一個(gè)簡(jiǎn)單的圓周率的近似計(jì)算,在這個(gè)過程中我們要用到隨機(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個(gè)隨機(jī)數(shù)進(jìn)行投放,這樣得到的結(jié)果會(huì)更精確一些,運(yùn)行程序需要一定的時(shí)間,最終得到的結(jié)果如下
4.下面我們進(jìn)行一項(xiàng)簡(jiǎn)單的應(yīng)用,下圖為我在畫圖工具中隨便畫的一個(gè)圖,我們可以用蒙特卡羅方法來估算圖中黑色部分的面積。
5.上面的圖形是不規(guī)則的,我們只需知道在投放大量隨機(jī)數(shù)的情況下,隨機(jī)數(shù)在黑色部分出現(xiàn)的概率,再用總面積相乘即可估算黑色部分的面積。我們知道,黑色的rgb編碼為(0,0,0),所以需要統(tǒng)計(jì)rgb編碼為(0,0,0)時(shí)隨機(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): #用蒙特卡羅方法獲得估計(jì)值 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)
上面的代碼可分為兩部分,第一個(gè)for后面是用蒙特卡羅方法獲得的面積的估計(jì)值,第二個(gè)for后面是用遍歷所有像素點(diǎn)的方法獲得的面積的精確值,獲得兩個(gè)輸出后進(jìn)行對(duì)比。
我們?cè)谏厦娴某绦蛑胁捎昧?000000個(gè)隨機(jī)數(shù),可以看出兩個(gè)輸出結(jié)果相差并不大。
相關(guān)文章
Python大批量寫入數(shù)據(jù)(百萬級(jí)別)的方法
這篇文章主要給大家介紹了關(guān)于Python大批量寫入數(shù)據(jù)(百萬級(jí)別)的相關(guān)資料,在日常處理數(shù)據(jù)的過程中,我們都有批量寫入數(shù)據(jù)的需求,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下2023-07-07一行Python代碼實(shí)現(xiàn)為圖片上版權(quán)
不知道大家會(huì)不會(huì)遇到這樣的情況,自己辛辛苦苦整理的攻略,分享給自己的一些朋友,結(jié)果分享有人堂而皇之地拿著這份攻略圖片去引流,并聲稱是自己整理的,真是豈有此理!本文就來用Python實(shí)現(xiàn)為圖片上版權(quán),需要的可以參考一下2023-01-01python進(jìn)階學(xué)習(xí)實(shí)時(shí)目標(biāo)跟蹤示例詳解
這篇文章主要為大家介紹了python進(jìn)階學(xué)習(xí)實(shí)時(shí)目標(biāo)跟蹤示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Python實(shí)現(xiàn)字符串中某個(gè)字母的替代功能
小編想實(shí)現(xiàn)這樣一個(gè)功能:將輸入字符串中的字母 “i” 變成字母 “p”。想著很簡(jiǎn)單,怎么實(shí)現(xiàn)呢?下面小編給大家?guī)砹薖ython實(shí)現(xiàn)字符串中某個(gè)字母的替代功能,感興趣的朋友一起看看吧2019-10-10