python 的线性代数表现
performance in linear algebra with python
各种语言的benchmarks和相关问题网上到处都是。但是,我还是想不出是否应该在我的程序中切换到C的答案。
基本上,我程序中最耗时的部分涉及大量矩阵求逆和矩阵乘法。我有几个计划:
- 坚持使用 numpy。
- 将 C 与 LAPACK/BLAS 一起使用。
- 重写我的python程序,把最耗时的部分改成C,然后用python调用C。
我知道 numpy 只是围绕 LAPACK/BLAS 的东西。那么 2 或 3 会比 1 快 500% 吗?
看到你的问题,我只想问一个非常相似的问题。我从各个方向测试了这个问题。很长一段时间以来,我都试图用我的代码击败 numpy.dot
函数。
我有大型复杂矩阵,它们的乘法是我程序的主要瓶颈。我测试了以下方法
- 简单的 C 代码。
- 使用 cblas 进行各种优化的 cython 代码。
- python 32位和64位版本,发现64位版本比32位版本快1.5-2倍。
- ananconda 的 MKL 实现,但也不走运。
- einsum 用于矩阵乘法
- python 3和python 2.7是一样的python 3 @运算符也是一样的
numpy.dot(a,b,c)
比 c=numpy.dot(a,b)
稍微快一点
到目前为止,numpy.dot 是最好的。它击败了所有其他方法,有时略微 (einsum) 但大多数情况下非常显着。
在我的研究过程中,我遇到了一篇文章
Ultrafast matrix multiplication 这表明苹果的 altivec 实现可以在不到一秒的时间内乘以 2500x2500 矩阵。在我的 PC 上使用英特尔酷睿 i3 第 4 代 2.3 GHZ 4 gb 内存,使用 numpy.dot 花费了 73 秒,因此我仍在寻找在 PC 上更快的实现。
各种语言的benchmarks和相关问题网上到处都是。但是,我还是想不出是否应该在我的程序中切换到C的答案。
基本上,我程序中最耗时的部分涉及大量矩阵求逆和矩阵乘法。我有几个计划:
- 坚持使用 numpy。
- 将 C 与 LAPACK/BLAS 一起使用。
- 重写我的python程序,把最耗时的部分改成C,然后用python调用C。
我知道 numpy 只是围绕 LAPACK/BLAS 的东西。那么 2 或 3 会比 1 快 500% 吗?
看到你的问题,我只想问一个非常相似的问题。我从各个方向测试了这个问题。很长一段时间以来,我都试图用我的代码击败 numpy.dot
函数。
我有大型复杂矩阵,它们的乘法是我程序的主要瓶颈。我测试了以下方法
- 简单的 C 代码。
- 使用 cblas 进行各种优化的 cython 代码。
- python 32位和64位版本,发现64位版本比32位版本快1.5-2倍。
- ananconda 的 MKL 实现,但也不走运。
- einsum 用于矩阵乘法
- python 3和python 2.7是一样的python 3 @运算符也是一样的
numpy.dot(a,b,c)
比c=numpy.dot(a,b)
稍微快一点
到目前为止,numpy.dot 是最好的。它击败了所有其他方法,有时略微 (einsum) 但大多数情况下非常显着。
在我的研究过程中,我遇到了一篇文章 Ultrafast matrix multiplication 这表明苹果的 altivec 实现可以在不到一秒的时间内乘以 2500x2500 矩阵。在我的 PC 上使用英特尔酷睿 i3 第 4 代 2.3 GHZ 4 gb 内存,使用 numpy.dot 花费了 73 秒,因此我仍在寻找在 PC 上更快的实现。