Python中的numba的基本应用!让你的Python快一万…
2018-07-12 07:43:38来源:博客园 阅读 ()
可以看到几乎有 200 倍的差距,这当然是无法忍受的。为此,我们可以用vectorize来定义出类似于Ufunc的函数:
虽然还是慢了 2 倍左右,但已经好很多了
然后有几点需要注意的地方:
* vectorize下的函数所接受的参数都是一个个的数而非整个数组。所以上述add_with_vec的参数yy其实是输入数组y中的元素,而不是y本身。更详细的说明可以参见官方文档)
* 可以看到当常数 c 是整数和是浮点数时、速度是不同的。个人猜测这是因为若常数 c 为整数,那么实际运算时需要将它转化为浮点数,从而导致速度变慢
* 上述代码中我们没有显式地定义函数的参数类型和返回类型,但我们可以预先定义。比如说,如果我确定常数 c 就是整数的话,我就可以这样写:
虽说在普通的 Python3.6.1 下、运行结果将如下:
73.5 μs ± 4.22 μs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
21.2 μs ± 734 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
似乎还变慢了;不过如果使用 Intel Distribution for Python 的话,会发现parallel版本甚至会比numpy原生的版本要稍快一些
这个栗子中的性能提升就是实打实的了。总之,使用parallel时不能一概而论,还是要做些实验需要指出的是,vectorize中的参数target一共有三种取值:cpu(默认)、parallel和cuda。关于选择哪个取值,官方文档上有很好的说明:
使用 jit(nogil=True) 实现高效并发(多线程)我们知道,Python 中由于有 GIL 的存在,所以多线程用起来非常不舒服。不过 numba 的 jit 里面有一项参数叫 nogil,想来聪明的观众老爷们都猜到了它是干什么的了……
下面就来看一个栗子:
numba 的应用实例 —— 卷积与池化如果只想看效果的话倒没什么关系,不过如果想知道我具体在干什么的话,可以参见这篇文章
首先是卷积操作:
那么程序的运行结果将会是:
281 ms ± 12.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
66.2 ms ± 2.32 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
可以看到这又快了 3 倍左右
接下来是池化操作(我们选用的是 MaxPool):
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash