用 numexpr 库优化 numpy 计算速度
来源:互联网 发布:重置网络设置命令 编辑:程序博客网 时间:2024/05/17 22:17
注:本文同步也发表在我的独立博客中。
NumPy 虽然通过底层高度优化过的计算库可以实现接近C的高效计算,但在计算复杂且计算量庞大的时候多少还是有些嫌慢。Numexpr 库是最近发现的一个非常简单易用的 Numpy性能提升工具,很大程度上从我的需求上解决了性能的问题。
先看一个例子:
import numpy as npimport numexpr as nenx, ny = 1200, 1500a = np.linspace(0.,3.1416,nx*ny).reshape(nx,ny)for i in range(100): b = np.sin(a+i)**2 + np.cos(a+i)**2 + a**1.5
这个程序对一个较大的网格,进行一个较复杂的计算,在使用 Numpy的情况下,我的电脑大约需要运行35.5秒。
如果对其中最后一行进行修改,改成 numexpr 的表达式:
b = ne.evaluate("sin(a+i)**2 + cos(a+i)**2 + a**1.5")
这次的运行时间是3.2秒,10多倍的速度提升!
按 numexpr 官网的说明,现在的 CPU 计算速度多少都有点过剩,很多程序计算速度的瓶颈不在于 CPU,而在于 memory,很多时候 CPU 都「饿着」在等 memory 喂数据。因此,numexpr 做的主要工作是对数据存储方面的优化,细节就不展开了,不能不懂装懂。
更有趣的一点是,numexpr 可以实现自动的多线程计算,而且不需要复杂的配置。光这一点,就比 numba、cython 等方便许多。不过也许是与上面一段所说的对应,它并不会把计算机所有的可用核心都用上,妄自猜测这时是因为瓶颈在 memory 了吧。
根据我个人计算的需求来说,numexpr有几个好处:
- 对程序的修改简单,对支持的函数及表达式的提速效果明显;
- 自动化的多线程;
- 相比 numba 这种JIT式的优化,编译几乎没有占用时间;
0 0
- 用 numexpr 库优化 numpy 计算速度
- 使用numexpr加快多维数组numpy的算术运算
- 比较一下numpy.math和Python标准库的math.sin的计算速度
- 进一步优化计算的速度,调整次序。。。
- Python科学计算库NumPy
- Python3科学计算库numpy
- 科学计算库Numpy-数据结构
- Python科学计算库Numpy的使用
- python 科学计算库 - Numpy,Scipy,Pandas
- MKL库提升Numpy计算性能
- Python科学计算库NumPy基础操作
- 科学计算库Numpy --数组(ndarray)
- python科学计算库numpy的使用
- python的可学计算库 Numpy
- numpy使用MKL库提升计算性能
- 科学计算库Numpy-数据操作
- 科学计算库Numpy-矩阵属性
- 科学计算库Numpy-矩阵操作
- 创建OSGI应用程序的通用方法
- RESTful API 设计指南
- Visual Studio配置OpenGL
- SSD 从形式到实质之改变
- Android Asynchronous Http Client
- 用 numexpr 库优化 numpy 计算速度
- 英语资料翻译
- 构造函数的选择调用
- JAVA 构造器重载的的 this
- 【Android】Handler机制源码详解(二)
- 《征服C指针》这本书里有一个特别神奇的东西。
- fork-fork总共几个进程
- 初步认识刀片服务器及其技术
- 伊甸园日历游戏