我在用IPython的ipcluster引擎做一个简单的montecarlo模拟练习。我注意到,基于我定义函数的方式,执行时间有很大的不同,我正在问原因。具体情况如下:
当我将任务定义如下时,它很快:
def sample(n):
return (rand(n)**2 + rand(n)**2 <= 1).sum()
并行运行时:
^{pr2}$但如果我把函数改为:
def sample(n):
return sum(rand(n)**2 + rand(n)**2 <= 1)
我得到:
3.141232
1个回路,最好每回路1:3.81 s
…慢了71倍。为什么会这样?在
我不能太深入,但是它慢的原因是
sum(<array>)
是内置的cpythonsum函数,而您的<numpy array>.sum()
使用的是numpysum函数,它比内置的python版本快得多。在我想如果你用
sum(<array>)
替换numpy.sum(<array>)
,你会得到类似的结果查看numpysum文档:http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html
相关问题 更多 >
编程相关推荐