分析Cython代码,我们将分析用来计算欧拉常数近似值的Cython代码和NumPy代码。所需的计算公式请见http://en.wikipedia.org/wiki/E_%28mathematical_constant%29。
具体步骤
下面介绍怎样分析Cython代码。为此,请执行以下步骤。
- 用NumPy近似计算e
用NumPy近似计算e时,需要执行下列步骤。
- 创建一个由从1到n-1的自然数构成的数组(本例中n的默认值是40)。
- 计算数组的累积连乘,等同于求阶乘。
- 求取阶乘的倒数。
- 应用上述维基百科页面中的公式。
最后要加上标准的性能分析代码。具体代码如下:
这段代码在Windows平台上运行报错,原因是,默认情况下数组arr的数据类型是int32,不能容纳太大的计算结果。因此建议创建数组时,使用语句
arr = numpy.arange(1, n,dtype=numpy.uint64)
。
常数e近似计算的结果和性能分析的结果如下所示:
- 用Cython近似计算e
和上述用NumPy近似计算e的过程一样,Cython代码使用相同的算法,只是在具体实现上有一些差别。和NumPy相比,由于缺少合适的便捷函数,我们需要用到for
循环。而且,我们需要指明某些变量的类型。.pyx文件的具体代码如下。
下列Python程序首先引入了Cython模块,然后做了一些相关的性能分析。
Cython代码的分析结果如下:
攻略小结
我们分别分析了NumPy和Cython代码。NumPy在执行速度方面已经做了深度优化,NumPy程序和Cython程序都表现出了良好的性能,对此我们不应觉得意外。