python cython 模块(2)
cython 的主要用途是加速python 代码的执行速度,手段有很多种,最简单的一种就是将变量声明成静态类型:
比如用python 代码写的计算素数的函数,最大计算1000个:
def primes(kmax):
p = range(1000)
res = []
if kmax > 1000:
kmax = 1000
k, n = 0, 2
while k < kmax:
i = 0
while i < k and n % p[i] != 0:
i += 1
if i == k:
p[k] = n
k += 1
res.append(n)
n += 1
return res
用cython 写的计算素数的函数:
def primes(int kmax):
cdef int p[1000]
cdef int k = 0
cdef int n = 2
cdef int i = 0
res = []
if kmax > 1000:
kmax = 1000
while k < kmax:
i = 0
while i < k and n % p[i] != 0:
i += 1
if i == k:
p[k] = n
k += 1
res.append(n)
n += 1
return res
这两个函数实现了相同的功能, 不同的是cython 中将一些变量声明成了静态类型,
现在比较这两个函数的运行速度,先计算python 函数的 运行时间 test.py:
import time
import primes start = time.time()
a = primes.primes(1000)
end = time.time()
print "{}".format(end - start)
运行python test.py , 结果为 0.251568078995
在计算cython 函数的运行时间 test_cython.py:
import time
import cython_primes as primes start = time.time()
a = primes.primes(1000)
end = time.time()
print "{}".format(end - start)
运行python test_cython.py , 结果为 0.0071849822998
可以看出速度快了30多倍, 只是声明静态变量就提高了许多。
python cython 模块(2)的更多相关文章
- python cython 模块(1)
python 是一门动态类型的语音,其开发速度比C,C++等静态语言块, 但是速度慢很多, 而cython 通过混合C和python 的语法,可以提高python代码的运行速度 1) 安装cython ...
- Python标准模块--threading
1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...
- Python的模块引用和查找路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
- Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
- python基础-模块
一.模块介绍 ...
- python 安装模块
python安装模块的方法很多,在此仅介绍一种,不需要安装其他附带的pip等,python安装完之后,配置环境变量,我由于中英文分号原因,环境变量始终没能配置成功汗. 1:下载模块的压缩文件解压到任意 ...
- python Queue模块
先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...
- python logging模块可能会令人困惑的地方
python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...
随机推荐
- unity 显示帧率
Game视图右上角Stats按钮按下即可显示统计信息.
- Linux下修改时间时区的方法介绍
点评:在Linux中,用于时钟查看和设置的命令主要有date.hwclock和clock.其中,clock和 hwclock用法相近,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件 ...
- linux安装rzsz(lrzsz)
lrzsz是一个unix通信套件提供的,X,Y和ZModem文件传输协议,可以用在Windows与linux系统之间的文件传输,体积小速度快,可以与xshell工具配合使用. (1)在线安装 yum ...
- 【Android】17.1 Bound Services基本概念
分类:C#.Android.VS2015: 创建日期:2016-03-03 一.Bound Services—被绑定的服务 1.什么是Bound Service Bound Service是指通过接口 ...
- Re-ID with Triplet Loss
一篇讲Person Re-ID的论文,与人脸识别(认证)有非常多相通的地方. 文章链接: <In Defense of the Triplet Loss for Person Re-Identi ...
- chrome浏览器的scrollTop问题
使用zepto里面的scrollTop()方法是没用哒~~~ chrome浏览器: document.body.scrollTop = 一个数值 其它浏览器: document.documentEle ...
- 六、从length和length()方法开始
首先你可以快速回答下面问题吗.当没有任何IDE的情况下,如何得到一个数组的长度,如何得到一个String的长度.我问这个了很对不同水平的开发者:初级的中级的.他们不能快速正确的回答这个问题.当IDE提 ...
- 1.2.1 工作流管理系统参考模型 (zhuan)
http://book.51cto.com/art/201009/228705.htm ************************************************* <jB ...
- vim 删除一整块,vim 删除一整行
dd: 删除游标所在的一整行(常用) ndd: n为数字.删除光标所在的向下n行,例如20dd则是删除光标所在的向下20行 d1G: 删除光标所在到第一行的所有数据 dG: 删除光标所在到最后一行的所 ...
- silverlight调用WebService传递json接收绑定数据
1.接收数据: WebService通过接口接收数据.类型为object 2.类型转换: 通过json转换方法将object转换为json格式数据 3.调用WebService方法: silverli ...