MATLAB比Python更快吗?

时间:2010-01-25 14:47:43

标签: python matlab matrix performance

我想使用Biot–Savart law计算某些导体的磁场,我想使用1000x1000x1000矩阵。在我使用MATLAB之前,现在我想使用Python。 Python比MATLAB慢吗?如何让Python更快?

编辑: 也许最好的方法是用C / C ++计算大数组,然后将它们转移到Python。我想用VPython想象一下。

EDIT2:在我的情况下哪个更好:C还是C ++?

8 个答案:

答案 0 :(得分:27)

您可以在此链接的底部找到一些有用的结果

http://wiki.scipy.org/PerformancePython

从介绍中,

  

编织与NumPy,Pyrex,Psyco,Fortran(77和90)和C ++的比较,用于求解拉普拉斯方程。

它还比较了MATLAB,并且似乎表现出与使用Python和NumPy时相似的速度。

当然这只是一个具体的例子,你的应用程序可能会允许更好或更差的性能。在两者上运行相同的测试并进行比较没有任何害处。

您还可以使用优化的库编译NumPy,例如ATLAS,它提供了一些BLAS / LAPACK例程。这些应该与MATLAB的速度相当。

我不确定NumPy下载是否已针对它构建,但我认为如果您编译NumPy,ATLAS会将库调整到您的系统,

http://www.scipy.org/Installing_SciPy/Windows

该链接提供了有关Windows平台所需内容的更多详细信息。

编辑:

如果你想知道什么表现更好,C或C ++,可能值得问一个新问题。虽然从上面的链接C ++有最好的表现。其他解决方案也非常接近,即Pyrex,Python / Fortran(使用f2py)和内联C ++。

我在C ++下唯一的矩阵代数是使用MTL并实现扩展卡尔曼滤波器。我想,但实质上它取决于您使用LAPACK / BLAS的库以及它的优化程度。

此链接包含许多语言的面向对象数字包的列表。

http://www.oonumerics.org/oon/

答案 1 :(得分:19)

NumPy和MATLAB都使用标准线性代数运算的基础BLAS实现。有一段时间都使用ATLAS,但现在MATLAB显然还带有其他实现,如英特尔的Math Kernel Library(MKL)。哪一个更快取决于系统以及如何编译BLAS实现。您还可以使用MKL编译NumPy,Enthought正在为他们的Python发行版支持MKL(请参阅他们的roadmap)。这也是最近的interesting blog post

另一方面,如果您需要更专业的操作或数据结构,那么Python和MATLAB都为您提供了各种优化方法(如CythonPyCUDA,...)。

编辑:我更正了这个答案,以考虑不同的BLAS实现。我希望现在能够公平地反映现状。

答案 2 :(得分:7)

唯一有效的测试是对它进行基准测试。这实际上取决于您的平台是什么,以及Biot-Savart Law如何映射到Matlab或NumPy / SciPy内置操作。

至于加快Python的速度,谷歌正在开发Unladen Swallow,一个用于Python的JIT编译器。可能还有其他像这样的项目。

答案 3 :(得分:4)

根据您的编辑2,我强烈建议您使用Fortran,因为您可以利用可用的线性代数子程序(Lapack和Blas),并且它比C / C ++更简单,用于矩阵计算。

如果您更喜欢使用C / C ++方法,我会使用C,因为您可能需要在可能简单的界面上进行原始性能(矩阵计算往往具有简单的接口和复杂的算法)。

但是,如果您决定使用C ++,则可以使用TNT(模板数值工具包,Lapack的C ++实现)。

祝你好运。

答案 4 :(得分:3)

如果您只是使用Python(使用NumPy),它可能会更慢,具体取决于您使用的是哪些部分,是否安装了优化的线性代数库,以及您如何知道如何利用NumPy。

为了加快速度,您可以做一些事情。有一个名为Cython的工具允许您向Python代码添加类型声明并将其转换为C语言中的Python扩展模块。这对您有多大好处取决于您对类型声明的勤勉程度 - 如果你根本不添加任何东西,你将看不到任何好处。 Cython也支持NumPy类型,尽管这些类型比其他类型更复杂。

如果你有一个好的显卡并愿意学习一点GPU计算,PyCUDA也可以提供帮助。 (如果你没有nvidia显卡,我听说还有一个PyOpenCL正在开发中)。我不知道你的问题域,但如果它可以映射到CUDA问题,那么它应该能够很好地处理你的10 ^ 9元素。

答案 5 :(得分:2)

这是基于一些线性代数函数的MATLAB和NumPy / MKL之间的更新“比较”:

http://dpinte.wordpress.com/2010/03/16/numpymkl-vs-matlab-performance/

点积不是那么慢; - )

答案 6 :(得分:0)

我还想指出Python(+ NumPy)可以通过F2Py模块轻松地与Fortran进行交互,这基本上可以让您在卸载到它的代码片段中使用Fortran本机速度。

答案 7 :(得分:0)

我找不到太多难以回答同样问题的数据,所以我继续自己做了测试。所使用的结果,脚本和数据集都可以在MATLAB vs Python speed for vibration analysis上的帖子中找到。

长话短说,MATLAB中的FFT函数比Python好,但你可以做一些简单的操作来获得可比较的结果和速度。我还发现,与MATLAB相比,Python中的导入数据 更快 (即使对于使用scipy.io的MAT文件)。