我对于 SciPy 中的
使用SciPy:
第二个版本快了大约5倍(在两台Mac上测试,python-2.7.9-1,IPython 2.3.1-py27_0)。这是SciPy的
comb
函数 比起 Python 的朴素实现速度更慢感到困惑。下面是两个程序求解 欧拉计划 53 题 所需的时间。请注意,本文保留了 HTML 标签。
使用SciPy:
%%timeit
from scipy.misc import comb
result = 0
for n in range(1, 101):
for k in range(1, n + 1):
if comb(n, k) > 1000000:
result += 1
result
输出:
1 loops, best of 3: 483 ms per loop
没有使用SciPy:
%%timeit
from math import factorial
def comb(n, k):
return factorial(n) / factorial(k) / factorial(n - k)
result = 0
for n in range(1, 101):
for k in range(1, n + 1):
if comb(n, k) > 1000000:
result += 1
result
输出:
10 loops, best of 3: 86.9 ms per loop
第二个版本快了大约5倍(在两台Mac上测试,python-2.7.9-1,IPython 2.3.1-py27_0)。这是SciPy的
comb
函数的预期行为吗(源代码)?我做错了什么吗?
编辑(来自Anaconda 3.7.3-py27_0分发的SciPy):
import scipy; print scipy.version.version
0.12.0
编辑(在IPython之外没有区别):
$ time python with_scipy.py
real 0m0.700s
user 0m0.610s
sys 0m0.069s
$ time python without_scipy.py
real 0m0.134s
user 0m0.099s
sys 0m0.015s
time python simple-script.py
。 - ErikR