1. Cython是什么?

Cython是让Python脚本支持C语言扩展的编译器,Cython能够将Python+C混合编码的.pyx脚本转换为C代码,主要用于优化Python脚本性能或Python调用C函数库。由于Python固有的性能差的问题,用C扩展Python成为提高Python性能常用方法,Cython算是较为常见的一种扩展方式。

2. 如何安装Cython?

我们可以通过conda或者pip来进行安装,命令如下:

$ conda install -c anaconda cython

或者

$ pip install Cython

3. 简单示例

安装完成后,我们以一个简单的Cython项目作为例子,来说明Cython的编译步骤.首先我们需要知道Cython源文件均以.pyx结尾.比如我们需要定义一个简单的返回一个字符串的函数,如下所示:
1). 创建examples_cy.pyx

$ touch examples_cy.pyx

2). 往里写入函数hello_cython, 如下所示

def hello_cython():return "Hello Cython!"

3). 在同级目录下创建setup.py,该文件负责编译上述pyx文件生成.c 和 .so文件

$ touch setup.py

内容如下:

from distutils.core import setup
from Cython.Build import cythonize
setup(name="Example Cython",ext_modules=cythonize(["examples_cy.pyx"])
)

4). 执行编译命令

python setup.py build_ext --inplace

执行上述命令,进行编译,编译前目录结构如下:

编译过程如下:

编译后如下:

5). 编写main.py,进行验证

$ touch main.py

内容如下:

from examples_cy import hello_cython
print(hello_cython())

执行结果如下:

4. 性能比对

学会上面简单的操作后,接下来我们来举一个稍微复杂的例子来对比使用Python和Cython的性能.我们以计算以下级数为例来做相关性能对比:

1).使用python代码实现如下:

def pi_py(N):pi = 0for n in range(N):pi += (-1.0)**n/(2*n + 1)return 4*pi

2).使用cython代码实现如下:
在上述examples_cy.pyx里,使用cython语法实现上述操作,代码如下:

cpdef double pi_cy(int N):cdef double pi = 0cdef int n;for n in range(N):pi += (-1.0) ** n / (2 * n + 1)return 4 * pi

上述代码中的cpdef表明在C语言层面声明了函数。正如我们所知道的在C语言中你必须为每一个函数定义返回值的类型.一般来说def定义的函数可以从python和Cython调用,而cdef可以从Cython和C调用.

3). 再次编译

python setup.py build_ext --inplace

4). 在main.py中编写统计耗时函数

from examples_cy import hello_cython,pi_cy
import timedef pi_py(N):pi = 0for n in range(N):pi += (-1) **n / (2*n + 1)return 4*piif __name__ == "__main__":print(hello_cython())stime = time.time()for _ in range(100):out1 = pi_py(1000000)etime = time.time()stime2 = time.time()for _ in range(100):out2 = pi_cy(1000000)etime2 = time.time()print("pi_py result {} time cost {} s".format(out1, etime - stime))print("pi_cy result {} time cost {} s".format(out2, etime2 - stime2))

我们统计上述两个函数执行100次的时间,结果如下:

5. 总结

使用Cython和Python完成上述通过计算级数来实现pi值的逼近,使用Cython相比Python效率可以提升5倍​以上。

关注公众号《AI算法之道》,获取更多AI算法资讯.

【深度好文】python加速库cython简介相关推荐

  1. 【深度好文】Python加速库Numba简介

    1. Numba是什么? Numba是一款可以将python函数编译为机器代码的JIT编译器,经过Numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言.普通pyt ...

  2. 深度神经网络加速库cuDNN简介

    深度神经网络加速库cuDNN简介 简介 NVIDIA® CUDA深度神经网络库 (cuDNN: CUDA Deep Neural Network ) 是用于深度神经网络的 GPU 加速基元库.它提供了 ...

  3. [Python] numpy库的简介和常用函数

    参考博客之一Python之Numpy详细教程 其中简介和对象出自该博客. 该博客中介绍的函数,本人并未采用,因为有些确实不太常用. 常用的函数我放在下面单独开了一章. numpy简介 numpy 是一 ...

  4. python 拼音库 pypinyin 简介

    目录 安装 基本拼音 风格转换 严格模式 自定义拼音 python 中提供了汉字转拼音的库,名字叫做 PyPinyin,可以用于汉字注音.排序.检索等等场合,是基于 hotto/pinyin 这个库开 ...

  5. Python加速库Numba

    1.Numba库介绍 Numba是一款可以在运行时把python函数编译为机器码的JIT编译器. 经过Numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言. 普通 ...

  6. python jenkins库 api简介

    Python Jenkins Guide: https://python-jenkins.readthedocs.io/en/latest/index.html Python-jenkins: htt ...

  7. CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)

    1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...

  8. Python各类库的简介(转)

    转的一篇,整理的很全了,转需及自用 原文:https://blog.csdn.net/weixin_42209553/article/details/84074840 正文: 格式:库,名称,简介 C ...

  9. Python常用库 - 【持续整理归档】

    Python常用库 - [持续整理归档],比较多,会逐步慢慢细化分类和扩从python常用库.(最后更新:2020-4-8) 为方便Python开发人员进行敏捷开发,高效的完成工作需求,耗时很久整理的 ...

最新文章

  1. Visual Studio Extensions for SharePoint v1.1
  2. hdu 2897 巴什博弈变形
  3. 递归神经网络——就是解决AST这样的问题
  4. 哈希算法python_哈希算法(Python代码实现)
  5. linux tomcat8 启动慢,Linux系统下Tomcat8启动速度很慢的解决方法
  6. FastStoneCapture屏幕截图软件
  7. 性能报告——使用AOP与DYNAMICProxy的orm性能测试
  8. 基于JAVA+SpringMVC+Mybatis+Vue+MYSQL的大学体育健康管理系统
  9. java asm源码分析_探究CAS原理(基于JAVA8源码分析)
  10. 【转载】在.NET环境中实现每日构建--NAnt篇
  11. esxi忘记密码重置方法
  12. visual设计的界面发布到iis上显示不一样_Material Design暗夜模式设计指南
  13. FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()
  14. File /usr/local/lib/python3.5/site-packages/dateutil/rrule.py, line 55 raise ValueError
  15. mysql配置文件(完整版)
  16. 零基础学习GitHub桌面版-1 GitHub桌面版的下载安装与使用
  17. 中国近代史导图(二)
  18. Win7 文件加密存储操作后,如何在事后备份证书、秘钥
  19. 在双GPU(核显+NVIDIA)计算机中正确安装Ubuntu 18.04下的NVIDIA驱动程序(解决循环登录等问题)
  20. 耳机重装系统后服务器坏了,Win7重装后耳机没声音|重装系统后耳机没声音怎么办?...

热门文章

  1. SQL注入攻击及危害
  2. 前端 sqllite sql.js
  3. 牛客网SQL刷题四-电商场景(某东商城)
  4. 10GBASE-T SFP+电口模块
  5. Luminati怎么玩,为用户解决什么问题?
  6. 七牛 JSSDK 配置+常见问题
  7. 人工智能数学课高等数学线性微积分数学教程笔记(1. 数学内容概述)
  8. python怎么批量下载年报_使用Python批量下载Wind数据库中的PDF报告
  9. FinalShell SSH工具安装步骤及介绍
  10. Android——动画的实现