如何在scipy / numpy中加速expm函数等矩阵函数?

时间:2015-05-05 08:53:14

标签: numpy scipy

我正在使用scipynumpy多次计算6 * 6矩阵的取幂。

与Matlab相比,速度慢了约10倍。

我正在使用的功能是scipy.linalg.expm,我还尝试过不推荐的方法scipy.linalg.expm2scipy.linalg.expm3,这些只比expm快两倍。我的问题是:

  1. expm2expm3有什么问题,因为它们比expm更快?

  2. 我正在使用http://www.lfd.uci.edu/~gohlke/pythonlibs/的轮包,我找到了https://software.intel.com/en-us/articles/building-numpyscipy-with-intel-mkl-and-intel-fortran-on-windows。轮盘包是用MKL编译的。如果没有,我想我可以通过自己用MKL编译来优化和调整scipy?

  3. 优化效果的其他方法是什么?

2 个答案:

答案 0 :(得分:0)

我认为我已经找到了问题1和2的答案 1.似乎expm2和expm3返回数组而不是矩阵。但它们比expm快2倍

  1. 好吧,经过一整天试图用MKL编译scipy,我成功了。构建scipy真的很难,特别是当我使用windows,x64和python3时。事实证明这是浪费时间。它甚至不比http://www.lfd.uci.edu/~gohlke/pythonlibs/的whl包快一点。
  2. 希望有人回答问题3。

答案 1 :(得分:0)

您的矩阵相对较小,因此数字部分可能不是瓶颈。您应该使用分析器来确保限制在取幂中。 您还可以查看source code of these implementations并编写具有较少条件和检查的等效函数。