【思维导图】使用numexpr加快多维数组 numpy的算术运算网络资料汇总

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用numexpr加快多维数组numpy的算术运算

numpy是python为了科学计算而开发的支持多维的数组,
o据说在numpy的基础上执行算术运算速度很快,
可是和numexpr比起来,要差得远了.
o使用numexpr,比numpy的速度要加快数倍,甚至数十倍.
o因此在执行大量预算和对大数组进行操作时,一定要使用numexpr.
下面还是看看例子吧,先看看numexpr是如何使用的:
onumexpr接受字符串表达式即可,分析后立即计算
o案例
>>> import numpy as np
# 导包
>>> import numexpr as ne
>>> a = np.arange(1e6)
>>> b = np.arange(1e6)
>>> ne.evaluate(“a + 1”) # 最简单的表达式
记得括号里的计算式一定要加上引号,变成字符串。。。
array([ 1.00000000e+00, 2.00000000e+00, 3.00000000e+00, …,
 9.99998000e+05, 9.99999000e+05, 1.00000000e+06])
>>> ne.evaluate('ab-4.1a > 2.5b’) # 稍微复杂一点的例子
array([False, False, False, …, True, True, True], dtype=bool)
下面的例子比较了numpy和numexpr运算时间
o>>> timeit a2 + b2 + 2
ab
o10 loops, best of 3: 21.5 ms per loop
o>>> timeit ne.evaluate("a2 + b2 + 2
ab")
o100 loops, best of 3: 2.14 ms per loop
# 比NumPy快10.0倍
o>>> ne.set_num_threads(8)
# using just 8 threads
set_num_threads命令
o>>> timeit ne.evaluate("a2 + b2 + 2
ab")
timeit 命令
o100 loops, best of 3: 3.15 ms per loop
# 比NumPy快6.8倍
o>>> ne.set_num_threads(1)
# using just 1 thread
o>>> timeit ne.evaluate("a2 + b2 + 2
a*b")
o100 loops, best of 3: 7.58 ms per loop
计算方法对比
o准备数据
import numexprimport numpy as np ls1=np.array([int(np.random.rand()*100) for i in range(1<<25)])ls2=np.array([int(np.random.rand()*100) for i in range(1<<25)])
o加法
%timeit ls1+ls2
##结果
o## 10 loops, best of 3: 74 ms per loop
%timeit numexpr.evaluate(‘ls1+ls2’)
##结果
o## 10 loops, best of 3: 40.5 ms per loop
o乘法
%timeit ls12+ls23
##结果
o## 1 loop, best of 3: 251 ms per loop
%timeit numexpr.evaluate(‘ls12+ls23’)
##结果
o## 10 loops, best of 3: 51.7 ms per loop
numexpr这玩意不仅仅会加速,而且会比numpy节约内存,会比numpy少产生临时的中间变量
参考文献
https://blog.csdn.net/rumswell/article/details/7349743
https://blog.csdn.net/Dontla/article/details/107008224?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160553097219725222423582%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160553097219725222423582&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-4-107008224.first_rank_ecpm_v3_pc_rank_v2&utm_term=numexpr&spm=1018.2118.3001.4449

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神经美学_茂森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值