• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于python:numexpr你以为-numpy-已经够快了其实它还可以更快

python 搞代码 4年前 (2022-02-20) 25次浏览 已收录 0个评论
文章目录[隐藏]

开篇

python语言被宽泛用于数据分析和机器学习。然而,因为python的底层个性,python的运行速率低始终被宽泛诟病。其中,numpy和pandas的宽泛应用曾经将数据处理和机器学习的速率晋升了几个品位。

然而,随着数据的越来越多,很多人曾经不再满足numpy和pandas的速度,从而退出了一批减速优化拓展包。这篇文章次要介绍一个轻量、然而功能强大的python扩大包 ”NumExpr”,看看它是如何高效解析数学公式的。

NumExpr

NumExpr的应用及其简略,只须要将原来的numpy语句应用双引号框起来,并应用numexpr中的evaluate办法调用即可。

第一步:须要引入 numexpr 和 numpy 扩大包;

import numexpr as ne

import numpy as np

第二步:创立两个numpy的array – a 和 b;

a和b两个所蕴含的数据个数为100万个。

当咱们须要执行简略的加减乘除的时候,numexpr的效率曾经失去了很好地体现。如上图所示,通过执行 2 a + 3 b,如果间接操作,须要3.39 毫秒。然而,如果咱们是用ne.evaluate减速,能够将工夫缩短至1.55 毫秒。

numexpr在更加简单的数学表达式运算中,体现到底如何呢?

当咱们应用如上所示的数学表达式,失常执行须要28.3 ms。而通过numexpr的减速,只须要3.03 ms。

留神,numexpr是能够辨认 sin 函数的,所以咱们不须要在evaluate外面写np.sin,能够间接写 sin。

总结:解决数据量越大,数学计算越简单,则numexpr的减速成果越显著。

numpy 和 numexpr 比拟

咱们能够看到,当np.array的元素个数超过10e8,减速成果更加显著。

numexpr也反对逻辑表达式和复数表达式的减速,有趣味的读者敌人能够自行比拟。

numexpr 多线程减速

numexpr还有一个重要的减速利器,多线程操作。通过 ne.set_num_threads(1) 能够设置线程的数量,更多的线程示意程序能够同时对数学表达式进行计算。

如上所示,如果咱们设置单线程,程序运行须要13.4 ms。设置了双线程,速度则能够晋升一倍。

numexpr对pandas的减速

numexpr的设计次要针对的是numpy。同样的,咱们晓得pandas也是基于numpy开发的。天然,numexpr同样能够被用来对pandas减速。

pandas中有一个eval办法就是使用了numexpr,对pandas代码进行优化减速。

当咱们构建几个pandas的dataframe,而后对它们进行运算的时候,pd.eval 能够将程序从原先的47.4 ms 减速到17.6 ms。

总结

通过以上的实例,numexpr对于numpy和pandas的减速是很显著的,尤其当数据量比拟大和计算比较复杂的状况下。同时,numexpr的应用非常简单。然而,咱们须要留神的是,任何减速工具都会有局限性的,并不是所有的工作都能够应用numexpr进行减速。

看完别走还有惊喜!

我精心整顿了计算机/Python/机器学习/深度学习相干的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python:numexpr你以为-numpy-已经够快了其实它还可以更快

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址