
上QQ阅读APP看书,第一时间看更新
1.3.7 提高运算速度
Python的动态特性虽然方便了程序的开发,但也会极大地降低程序的运行速度。使用Cython可以将添加了类型声明的Python程序编译成C语言源代码,再编译成扩展模块,从而提高程序的运算速度。使用Cython既能实现C语言的运算速度,也能使用Python的所有动态特性,极大地方便了扩展库的编写。
下面是按照前面介绍的公式使用循环计算π的源程序,使用cdef关键字定义变量的类型,从而提高程序的运行效率:
%%cython import cython @cython.cdivision(True) def calc_pi(int n): cdef double pi = 0 cdef int i for i in range(1, n, 4): pi += 4.0 / i for i in range(3, n, 4): pi -= 4.0 / i return pi
调用calc_pi()来计算的近似值:
calc_pi(1000000) 3.141590653589821
下面使用%timeit比较calc_pi()和NumPy库来计算的运算时间:
n = 1000000 %timeit calc_pi(n) %timeit np.sum(4.0 / np.r_[1:n:4, -3:-n:-4]) 100 loops, best of 3: 3.9 ms per loop 100 loops, best of 3: 5.94 ms per loop