使用numexpr加快多维数组numpy的算术运算

本文介绍了NumExpr库如何显著提升Python中大规模数值运算的速度,通过对比NumPy展示了其在多线程支持下可达十倍以上的性能优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 numpy是python为了科学计算而开发的支持多维的数组,

据说在numpy的基础上执行算术运算速度很快,

可是和numexpr比起来,要差得远了.

使用numexpr,比numpy的速度要加快数倍,甚至数十倍.

因此在执行大量预算和对大数组进行操作时,一定要使用numexpr.

下面还是看看例子吧,先看看numexpr是如何使用的:

 

numexpr接受字符串表达式即可,分析后立即计算

 

>>> 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('a*b-4.1*a > 2.5*b')   # 稍微复杂一点的例子
array([False, False, False, ...,  True,  True,  True], dtype=bool)




 

 

下面的例子比较了numpy和numexpr运算时间

>>> timeit a**2 + b**2 + 2*a*b 
10 loops, best of 3: 21.5 ms per loop  
# numexpr w/ 16 threads (default for 8-core, with hyperthreading) 
>>> timeit ne.evaluate("a**2 + b**2 + 2*a*b") 
100 loops, best of 3: 2.14 ms per loop  
# 比NumPy快10.0倍
>>> ne.set_num_threads(8)  
# using just 8 threads 
>>> timeit ne.evaluate("a**2 + b**2 + 2*a*b") 
100 loops, best of 3: 3.15 ms per loop  
# 比NumPy快6.8倍
>>> ne.set_num_threads(1)  # using just 1 thread 
>>> timeit ne.evaluate("a**2 + b**2 + 2*a*b") 
100 loops, best of 3: 7.58 ms per loop  
# 比NumPy快2.8倍


numexpr运算时间不是一般的快,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值