有效地估计具有互质概率的Pi

时间:2017-03-14 14:52:10

标签: python probability

所有

我不是一个优秀的Python程序员,但我总是喜欢学习。所以,看完Matt Parker's latest Youtube video之后,我想我就试一试。而在一点点,我有一个程序,它做到了:

#!/usr/bin/env python

from __future__ import division
from fractions import gcd
from random import sample
from math import sqrt

NUMSAMPLES=10000

list1 = sample(xrange(1000000),NUMSAMPLES)
list2 = sample(xrange(1000000),NUMSAMPLES)

counter = 0

for i,j in zip(list1,list2):
    if gcd(i,j) == 1:
        counter += 1

prob_coprime = counter/NUMSAMPLES
pi_estimate = sqrt(6/prob_coprime)
print "Estimate of pi: ", pi_estimate

这很有效。好哇!但是,我的猜测是,这远远不是最有效的方式(我是一个Fortran程序员,所以我认为是循环)。我确信有更好的方法来执行该计数器循环,因为我注意到随着NUMSAMPLES的增加,这段代码需要更长的时间。

而且,我的列表制作也可能是记忆力。或许可以用生成器或某种东西来创建i,j根据需要?

帮助这位老人学习:什么是更好,更有效的Python方法呢?

0 个答案:

没有答案