用Cython加速Python代码
安装Cython
pip install Cython
如何使用
要在我们的笔记本中使用Cython,我们将使用IPython magic命令。Magic命令以百分号开始,并提供一些额外的功能,这些功能可以增强工作流。通常,有两种类型的Magic命令:
行magic由单个“%”表示,并且只在一行输入进行操作
单元格magic由两个“%”表示,并在多行输入上操作。
让我们开始:
首先,为了能够使用Cython,我们必须运行:
%load_ext Cython
现在,每当我们想在代码单元中运行Cython时,我们必须首先将以下magic命令放入单元格:
%%cython
完成这些之后,就可以开始编写Cython代码了。
Cython可以跑多快
与普通Python代码相比,Cython的速度快多少实际上取决于代码本身。例如,如果您正在运行具有许多变量的计算开销较大的循环,Cython将大大优于常规Python代码。递归函数也会使Cython比Python快很多。
让我们用斐波那契数列来证明这一点。简单地说,这个算法通过把前两个数相加找到下一个数。下面是Python中可能出现的情况:
%%cython
def fibonacci(n):
if n<0:
print("1st fibonacci number= 0")
elif n==1:
return 0
elif n==2:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
运行代码:
%%time
fibonacci(39)
结果:
CPU times: user 8.39 s, sys: 78.6 ms, total: 8.47 s
Wall time: 8.43 s
39088169
正如所见,找到序列的第39个数字花费了8.39秒,这里Wall time是指从函数调用开始到结束所花费的总时间。
接下来在magic命令行后面添加-a有何不同:
%%cython -a
def fibonacci_c(int n):
if n<0:
print("1st fibonacci number = 0")
elif n==1:
return 0
elif n==2:
return 1
else:
return fibonacci_c(n-1)+fibonacci_c(n-2)
运行结果如下:

正如您所看到的,通过在magic命令后面添加’ -a ‘,我们收到了一些注释,这些注释向我们展示了代码中有多少Python交互。
这里的目标是去掉所有的黄线,让它们有一个白色的背景。在这种情况下,将不存在Python交互,所有代码都将在C中运行。
您还可以单击每行旁边的“+”符号,查看Python代码的C转换。
运行代码看下能有多快:
%%time
fibonacci_c(39)
运行结果如下:
CPU times: user 4.85 s, sys: 49.7 ms, total: 4.9 s
Wall time: 4.89 s
39088169
本例中,Cython的速度大约是Python的5.8倍。这清楚地展示了利用Cython节省时间的能力,与常规Python代码相比,Cython提供了最大的改进。
文章参考于网络,如有侵权,请联系删除
用Cython加速Python代码的更多相关文章
- 用Cython加速Python程序以及包装C程序简单测试
用Cython加速Python程序 我没有拼错,就是Cython,C+Python=Cython! 我们来看看Cython的威力,先运行下边的程序: import time def fib(n): i ...
- 利用Cython对python代码进行加密
利用Cython对python代码进行加密 Cython是属于PYTHON的超集,他首先会将PYTHON代码转化成C语言代码,然后通过c编译器生成可执行文件.优势:资源丰富,适合快速开发.翻译成C后速 ...
- 用 Numba 加速 Python 代码
原文出自微信公众号:Python那些事 一.介绍 pip install numba Numba 是 python 的即时(Just-in-time)编译器,即当你调用 python 函数时,你的全部 ...
- Cython保护Python代码
注:.pyc也有一定的保护性,容易被反编译出源码... 项目发布时,为防止源码泄露,需要对源码进行一定的保护机制,本文使用Cython将.py文件转为.so进行保护.这一方法,虽仍能被反编译,但难度会 ...
- 使用cython库对python代码进行动态编译达到加速效果及python第三方包的制作安装
1.测试代码:新建 fib.pyx # coding:utf-8 import matplotlib.pyplot as plt import numpy as np from sklearn.cl ...
- [转]使用Cython来保护Python代码库
转自:http://blog.csdn.net/chenyulancn/article/details/77168621 最近,我在做一个需要使用Cython来保护整个代码库的Python项目. 起初 ...
- 让Python代码更快运行的 5 种方法
不论什么语言,我们都需要注意性能优化问题,提高执行效率.选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足之处,那就是执行效率和性能不够亮.尽管Python从未如C和 ...
- 使用numba加速python程序
前面说过使用Cython来加速python程序的运行速度,但是相对来说程序改动较大,这次就说一种简单的方式来加速python计算速度的方法,就是使用numba库来进行,numba库可以使用JIT技术即 ...
- [转] Python 代码性能优化技巧
选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...
随机推荐
- Leetcode代码复盘_分治法相关
分治法 1.二分搜索(算法时间复杂度O(log n)) 输出:如果x=A[j],则输出j,否则输出0. 1.binarysearch(1,n) 过程:binarysearch(low,high) 1. ...
- Django框架(二十三)—— Django rest_framework-解析器
解析器 一.解析器的作用 根据请求头 content-type 选择对应的解析器对请求体内容进行处理,将传过来的数据解析成字典 二.使用解析器 1.局部使用 在视图类中重定义parser_classe ...
- Gitlab CI持续集成 - GitLab Runner 安装与注册
GitLab Runner安装 需要添加gitlab官方库: # For Debian/Ubuntu/Mint curl -L https://packages.gitlab.com/install/ ...
- 12-python基础—python3中的reduce()
在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,需要通过引入 functools 模块来调用 reduce() 函数: from ...
- CTU OPEN 2017 Punching Power /// 最大独立集
题目大意: 给定n 给定n个机器的位置 要求任意两个机器间的距离至少为1.3米 求最多能选择多少个机器 至少为1.3米 说明若是位于上下左右一步的得放就不行 将机器编号 将不能同时存在的机器连边 此时 ...
- python tkinter 实现 带界面(GUI)的RSA加密、签名
代码环境,python3.5.2 RSA加密的过程是:使用公钥加密,私钥解密 RSA签名的过程是:使用私钥签名,公钥验证 所以核心代码就是,生成公钥私钥,使用公钥私钥分别进行加密解密. 在实际编码的时 ...
- Invoke-Obfuscation混淆ps文件绕过Windows_Defender
前提 powershell只能针对win7之后的系统,之前的win操作系统默认没有安装powershell. 所在目录:C:\Windows\System32\WindowsPowerShell\v1 ...
- linux基础文件管理软硬链接
一.文件系统的基本结构 1.文件和目录被组成一个单根倒置树目录结构 2.文件系统从根目录下开始,用“/”表示 3.根文件系统(rootfs):root filesystem文件名区分大小写 4.以 . ...
- 图像元数据编辑软件:MetaImage使用流程讲解
MetaImage是唯一的macOS工具,允许在处理所有类型的标签格式时编辑,读取和写入元数据.在时尚的界面中导航,您可以更改图像元数据的所有内容,并对数百张相似的照片进行相同的编辑. https:/ ...
- 【leetcode】970. Powerful Integers
题目如下: Given two non-negative integers x and y, an integer is powerful if it is equal to x^i + y^j fo ...