我实现了一个实时LMS算法,而numpy.dot比我的采样时间花费的时间更多,所以我需要numpy更快(我的矩阵是1D和100长)。
我已经阅读过关于用ATLAS等建立numpy的内容,但从来没有做过这样的事情并花了我一整天的努力去做,没有成功......
有人可以解释为什么没有包含ATLAS的构建吗?任何人都可以提供一个吗?有没有其他方法来加速点积?
我已尝试过numba和scipy.linalg.gemm_dot,但似乎都没有加速。
我的系统是带有Intel处理器的Windows8.1
答案 0 :(得分:4)
如果你下载官方二进制文件,他们应该与ATLAS联系。如果您想确定,请检查np.show_config()
的输出。问题是ATLAS(自动调谐线性代数系统)检查许多不同的组合和算法,并在编译时保持最佳。因此,当您运行预编译的ATLAS时,您正在为不同于您的计算机运行它。
所以,你改进dot的选择是:
关于Cython的说明对Windows也有效,让它工作起来更加困难。我几年前(当我使用Windows时)试过,几天后就失败了;我不知道情况是否有所改善。
<强>替代:强>
你正在做两个向量的点积。然后,np.dot
可能不是最有效的方式。我会用简单的Python (vec1*vec2).sum()
来解释它(对于Numba来说非常好,这个表达式可以实际优化)或使用numexpr:
ne.evaluate(`sum(vec1 * vec2)`)
Numexpr还会自动并行化表达式。