小编leg*_*ses的帖子

numpy例程看起来不那么快

我正在使用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)

python performance fortran

6
推荐指数
3
解决办法
1257
查看次数

标签 统计

fortran ×1

performance ×1

python ×1