cython优化Python代码总结

jupyter编译减少黄色区域后,从最底层函数(没有调用其他函数)开始,一个一个粘贴进pyx文件生成pyd来调用,即从最底层函数开始嵌入

Cython官方文档:http://docs.cython.org/en/latest/index.html

安装:pip install cython

下面第3步是在cmd命令行执行(要到pyx文件路径下)

 cython优化Python代码总结_第1张图片

 

mly个人总结:当然不能直接把py文件改为pyx,然后写个setup.py生成pyd就以为能加速了,还要用cython的语法

 ===============================

cimport 是 Cython 中用来引入 .pxd 文件的命令

Cython 的函数使用 cdef 定义,并且他可以给所有参数以及返回值指定类型

在函数体内部,我们一样可以使用cdef typename varname 这样的语法来声明变量

在 Python 程序中,是看不到cdef的函数的,所以我们这里def naive_dot(a, b) 来调用 cdef过的 _naive_dot 函数。

 cython优化Python代码总结_第2张图片

如果我们把刚刚 Cython 代码中的类型标注都去掉(也就是函数参数和返回值类型以及函数体内部的cdef可以看到,这下 Cython 实现几乎和 Python 实现一样慢了。所以说,在 Cython 中,类型标注对于提升速度是至关重要的。

 cython优化Python代码总结_第3张图片

 

 

===========================

http://blog.csdn.net/ztf312/article/details/74998300

1、定义c数据类型

 

2、用c标准库替代Python模块

 

cdef extern from "math.h":
    np.float64_t exp(np.float64_t)
    np.float64_t sqrt(np.float64_t)
    np.float64_t fabs(np.float64_t)
    np.float64_t pow(np.float64_t x,np.float64_t y)

 ======================= 

3.1 Cython里同样支持Python里的for-in-range形式的for循环

3.2 出于性能的考虑,Cython对for循环作了优化,如for i in range(n),如果i是一个预先通过cdef定义的变量,那么Cython会将这样的for循环转成C代码,举个例子:

cdef int i

for i in range(0,10,2):

    printf("%d\n",i)

 

你可能感兴趣的:(Python)