线性代数与python的性能

时间:2015-12-07 08:50:32

标签: python c performance numpy blas

互联网上到处都是不同语言和相关问题的基准。但是,我仍然无法找到答案,我是否应该在我的程序中切换到C.

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

  1. 坚持numpy。
  2. 使用C和LAPACK / BLAS。
  3. 重写我的python程序并将最耗时的部分更改为C,然后使用python调用C。
  4. 我知道numpy只是LAPACK / BLAS的一部分。那么2或3是否会比1?(* 500)快得多(500%)

1 个答案:

答案 0 :(得分:1)

当我看到你的问题时,我只是想问一个非常相似的问题。我从各个方向测试了这个问题。从很长一段时间以来,我一直试图通过我的代码击败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 @ operator也是相同的
  7. numpy.dot(a,b,c)略快于c=numpy.dot(a,b)
  8. 到目前为止,numpy.dot是最好的。它击败了所有其他方法,有时略微(einsum),但大多数显着。

    在我的研究中,我遇到了一篇文章 Ultrafast matrix multiplication告诉苹果的altivec实现可以在不到一秒的时间内乘以2500x2500矩阵。在我的PC上使用intel核心i3第4代2.3 GHZ 4 gb内存,使用numpy.dot花了73秒,因此我仍然在寻找更快的PC实现。