我正在使用python来做一些贝叶斯统计.我已经在python和Fortran 95中编写了它.Fortran代码更快...就像100倍.我期望Fortran更快,但我真的希望通过使用numpy我可以获得python代码接近,可能在2的因素之内.我已经分析了python代码,看起来大部分时间用于执行以下操作:
scipy.stats.rvs:从分发中随机抽取.我这样做~19000次,总时间为3.552秒
numpy.slogdet:计算矩阵行列式的对数.我这样做~10,000,总共需要2.48秒
numpy.solve:解决一个线性系统:我称这个例程为10,000次,总时间为2.557秒
总的来说,我的代码运行时间约为11秒,而我的fortran代码运行时间为.092秒.你在开玩笑吗?我真的不想在我对python的期望中变得不切实际,而且我当然不希望我的python代码能够像Fortran一样快......但是速度要慢于100倍.Python必须是能做得比这更好.万一你好奇,这是我的探查器的完整输出:(我不知道为什么它把文本分成几个块)
1290611 function calls in 11.296 CPU seconds
Ordered by: internal time, function name
ncalls tottime percall cumtime percall filename:lineno(function)
18973 0.864 0.000 3.552 0.000 /usr/lib64/python2.6/site-packages/scipy/stats/distributions.py:484(rvs)
9976 0.819 0.000 2.480 0.000 /usr/lib64/python2.6/site-packages/numpy/linalg/linalg.py:1559(slogdet)
9976 0.627 0.000 6.659 0.001 /bluehome/legoses/bce/bayes_GP_integrated_out/python/ce_funcs.py:77(evaluate_posterior)
9384 0.591 0.000 0.753 0.000 /bluehome/legoses/bce/bayes_GP_integrated_out/python/ce_funcs.py:39(construct_R_matrix)
77852 0.533 0.000 0.533 0.000 :0(array)
37946 0.520 0.000 1.489 0.000 /usr/lib64/python2.6/site-packages/numpy/core/fromnumeric.py:32(_wrapit)
77851 0.423 0.000 0.956 0.000 /usr/lib64/python2.6/site-packages/numpy/core/numeric.py:216(asarray)
37946 0.360 0.000 0.360 0.000 :0(all)
9976 0.335 0.000 2.557 0.000 /usr/lib64/python2.6/sitepackages/scipy/linalg/basic.py:23(solve)
107799 …Run Code Online (Sandbox Code Playgroud)