我想使用蒙特卡羅方法來近似 pi 的值,使用不同的輸入點(10、10**1 等),并使用 Numba 更快地獲取代碼。
如下所示,有一個輸入 = 10 的模擬
import numba
from random import *
import math
from math import sqrt
@numba.jit(nopython=True)
def go_fast(pi):
inside = 0
inputs =10
for i in range(0,inputs):
x=random()
y=random()
if sqrt(x*x y*y)<=1:
inside =1
pi=4*inside/inputs
return (pi)
pi = math.pi
go_fast(pi)
我只想確保模擬設定正確,因為從這里得到的結果似乎有點誤導。謝謝
uj5u.com熱心網友回復:
這個功能
def go_fast(pi):
inside = 0
inputs =10
for i in range(0,inputs):
x=random()
y=random()
if sqrt(x*x y*y)<=1:
inside =1
pi=4*inside/inputs
return (pi)
將在遇到保持的 x, y 時終止,sqrt(x*x y*y)<=1換句話說,回圈的for圈數不是確定的(1 到 10 之間的任何值)。如果你想要恒定的輪數,for你需要把回圈體放在return 外面,這也適用于pi計算,因為它應該在收集資料后完成,也就是說你的代碼應該是
def go_fast(pi):
inside = 0
inputs =10
for i in range(0,inputs):
x=random()
y=random()
if sqrt(x*x y*y)<=1:
inside =1
pi=4*inside/inputs
return pi
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/489634.html
上一篇:如何使用ActiveQueryMethods獲得同樣的結果?
下一篇:查找直線和矩形之間的交點
