【深度好文】python加速库cython简介
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简介相关推荐
- 【深度好文】Python加速库Numba简介
1. Numba是什么? Numba是一款可以将python函数编译为机器代码的JIT编译器,经过Numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言.普通pyt ...
- 深度神经网络加速库cuDNN简介
深度神经网络加速库cuDNN简介 简介 NVIDIA® CUDA深度神经网络库 (cuDNN: CUDA Deep Neural Network ) 是用于深度神经网络的 GPU 加速基元库.它提供了 ...
- [Python] numpy库的简介和常用函数
参考博客之一Python之Numpy详细教程 其中简介和对象出自该博客. 该博客中介绍的函数,本人并未采用,因为有些确实不太常用. 常用的函数我放在下面单独开了一章. numpy简介 numpy 是一 ...
- python 拼音库 pypinyin 简介
目录 安装 基本拼音 风格转换 严格模式 自定义拼音 python 中提供了汉字转拼音的库,名字叫做 PyPinyin,可以用于汉字注音.排序.检索等等场合,是基于 hotto/pinyin 这个库开 ...
- Python加速库Numba
1.Numba库介绍 Numba是一款可以在运行时把python函数编译为机器码的JIT编译器. 经过Numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言. 普通 ...
- python jenkins库 api简介
Python Jenkins Guide: https://python-jenkins.readthedocs.io/en/latest/index.html Python-jenkins: htt ...
- CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)
1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...
- Python各类库的简介(转)
转的一篇,整理的很全了,转需及自用 原文:https://blog.csdn.net/weixin_42209553/article/details/84074840 正文: 格式:库,名称,简介 C ...
- Python常用库 - 【持续整理归档】
Python常用库 - [持续整理归档],比较多,会逐步慢慢细化分类和扩从python常用库.(最后更新:2020-4-8) 为方便Python开发人员进行敏捷开发,高效的完成工作需求,耗时很久整理的 ...
最新文章
- Visual Studio Extensions for SharePoint v1.1
- hdu 2897 巴什博弈变形
- 递归神经网络——就是解决AST这样的问题
- 哈希算法python_哈希算法(Python代码实现)
- linux tomcat8 启动慢,Linux系统下Tomcat8启动速度很慢的解决方法
- FastStoneCapture屏幕截图软件
- 性能报告——使用AOP与DYNAMICProxy的orm性能测试
- 基于JAVA+SpringMVC+Mybatis+Vue+MYSQL的大学体育健康管理系统
- java asm源码分析_探究CAS原理(基于JAVA8源码分析)
- 【转载】在.NET环境中实现每日构建--NAnt篇
- esxi忘记密码重置方法
- visual设计的界面发布到iis上显示不一样_Material Design暗夜模式设计指南
- FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()
- File /usr/local/lib/python3.5/site-packages/dateutil/rrule.py, line 55 raise ValueError
- mysql配置文件(完整版)
- 零基础学习GitHub桌面版-1 GitHub桌面版的下载安装与使用
- 中国近代史导图(二)
- Win7 文件加密存储操作后,如何在事后备份证书、秘钥
- 在双GPU(核显+NVIDIA)计算机中正确安装Ubuntu 18.04下的NVIDIA驱动程序(解决循环登录等问题)
- 耳机重装系统后服务器坏了,Win7重装后耳机没声音|重装系统后耳机没声音怎么办?...