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

【思维导图】使用numexpr加快多维数组 numpy的算术运算网络资料汇总
【思维导图】使用numexpr加快多维数组 numpy的算术运算网络资料汇总
【思维导图】使用numexpr加快多维数组 numpy的算术运算网络资料汇总
【思维导图】使用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.****.net/rumswell/article/details/7349743
https://blog.****.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