|
|
1
4
当你试图优化一个函数时,你应该知道这个函数的瓶颈是什么——没有它,你会花很多时间在错误的方向上运行。
让我们使用python函数作为基线(实际上我使用
我们应该问自己的第一个问题是:这个任务是内存还是CPU受限?显然,这是一项内存受限的任务——与所需的内存读写访问相比,减法算不了什么。 这意味着,所有这些我们都必须优化内存布局,以减少缓存未命中。根据经验,我们的内存访问应该一个接一个地访问连续的内存地址。
是这样吗?不,阵列
不是连续的。另一方面
将是连续访问。让我们改变信息存储的方式
现在的计时是:
还有两个小的改进:我们不必用零初始化结果,我们可以节省一些python开销,但这只给了我们大约5%:
现在,这大约比原始版本快8倍。 您可以使用Cython来进一步加快速度,但任务可能仍然是内存受限的,所以不要期望它明显更快,毕竟Cython无法使内存更快地工作。然而,如果没有适当的评测,很难说有多少改进是可能的——如果有人能想出一个更快的版本,那也就不足为奇了。 |
|
|
unfolx · numpy数组不等式的执行时间 1 年前 |
|
|
mchaudh4 · 用numpy表示三对角矩阵 1 年前 |
|
|
Geremia · 2D NumPy数组+1D数组? 1 年前 |
|
|
LMC · Numpy数组布尔索引以获取包含元素 1 年前 |
|
|
HJA24 · 根据条件用值正向填充Numpy矩阵/掩码 1 年前 |
|
|
Amarth Gûl · 找到一组向量的最近收敛点 1 年前 |
|
|
Mr. W · numpy.divide是函数、类还是其他什么? 1 年前 |
|
|
Mr. W · 为什么numpy.array在编辑内部数据时如此缓慢? 1 年前 |