python 的线性代数表现

performance in linear algebra with python

各种语言的benchmarks和相关问题网上到处都是。但是,我还是想不出是否应该在我的程序中切换到C的答案。

基本上,我程序中最耗时的部分涉及大量矩阵求逆和矩阵乘法。我有几个计划:

  1. 坚持使用 numpy。
  2. 将 C 与 LAPACK/BLAS 一起使用。
  3. 重写我的python程序,把最耗时的部分改成C,然后用python调用C。

我知道 numpy 只是围绕 LAPACK/BLAS 的东西。那么 2 或 3 会比 1 快 500% 吗?

看到你的问题,我只想问一个非常相似的问题。我从各个方向测试了这个问题。很长一段时间以来,我都试图用我的代码击败 numpy.dot 函数。

我有大型复杂矩阵,它们的乘法是我程序的主要瓶颈。我测试了以下方法

  1. 简单的 C 代码。
  2. 使用 cblas 进行各种优化的 cython 代码。
  3. python 32位和64位版本,发现64位版本比32位版本快1.5-2倍。
  4. ananconda 的 MKL 实现,但也不走运。
  5. einsum 用于矩阵乘法
  6. python 3和python 2.7是一样的python 3 @运算符也是一样的
  7. numpy.dot(a,b,c)c=numpy.dot(a,b)
  8. 稍微快一点

到目前为止,numpy.dot 是最好的。它击败了所有其他方法,有时略微 (einsum) 但大多数情况下非常显着。

在我的研究过程中,我遇到了一篇文章 Ultrafast matrix multiplication 这表明苹果的 altivec 实现可以在不到一秒的时间内乘以 2500x2500 矩阵。在我的 PC 上使用英特尔酷睿 i3 第 4 代 2.3 GHZ 4 gb 内存,使用 numpy.dot 花费了 73 秒,因此我仍在寻找在 PC 上更快的实现。