使用Cython而不是CPython + NumPy没有速度提升

Aer*_*ius 0 python numpy linear-algebra cython scipy

对于单一分配,我在MATLAB中编写了一个2D平方域流求解器.为了研究Python,我已经将MATLAB代码转换为Python.我使用NumPy进行所有矩阵向量乘法,我使用scipy.sparse.linalg.spsolve()来求解Ax = b,其中A是40x40且稀疏.

最后,我对解算器的速度并不太满意.因此,我使用Spyder中包含的分析器来追踪瓶颈.基本上,除了系统求解(使用上述方法)之外,所有线性代数运算都非常快.毫不奇怪,因为解决系统总是比仅增加一些向量和矩阵更昂贵.

我转向Cython来加速我的求解器.我阅读了http://wiki.cython.org/tutorials/numpy,我通过给每个变量一个静态类型(是的,我知道这不是最聪明或最有效的方式,但我急着看结果,并将在此后做适当的工作).我唯一没有给出静态类型的是稀疏矩阵A,因为它是一个CSR稀疏矩阵,我还不知道如何静态输入它.是的,我知道这是最重要的部分,因为分析表明系统解决了瓶颈.

在最终使用Cython编译所有内容之后,结果与没有Cython的结果完全相同......我确实理解Cython性能提升不会很好,因为我没有解决瓶颈,但是我不明白为什么Cython版本没有即使只快1%也不会跑.

有人可以帮助我从Cython中受益吗?如何让我的代码运行得更快?我应该如何从scipy静态类型中提供CSR稀疏矩阵?

我的代码可以使用此google云端硬盘链接下载:https: //docs.google.com/file/d/0B-nchNKLtgjeWTE4OXZrVUpfcWs/edit?usp =sharing

Len*_*bro 6

因为你没有解决瓶颈问题.

听起来我现在所做的就是让方法调用NumPy的速度更快一些.如果你犯了一个只会帮助很多呼叫NumPy的,但你说这不是瓶颈在哪里是你的.

Cython使您可以加速Python代码.它无法帮助您加速NumPy代码.