MATLAB比Python快吗?

42 投票
8 回答
83193 浏览
提问于 2025-04-15 18:26

我想用比奥-萨伐尔定律来计算一些导体的磁场,我需要一个1000x1000x1000的矩阵。之前我用的是MATLAB,但现在我想用Python。请问Python比MATLAB慢吗?我该如何让Python运行得更快呢?

编辑:也许最好的办法是用C/C++来计算这个大数组,然后再把它转到Python里。我想用VPython来进行可视化。

编辑2:在我的情况下,C和C++哪个更好呢?

8 个回答

8

唯一有效的测试就是进行基准测试。其实这很依赖于你的平台是什么,以及Biot-Savart定律在Matlab或NumPy/SciPy内置操作中的表现如何。

至于让Python运行得更快,谷歌正在开发一个叫Unladen Swallow的工具,这是一个为Python设计的即时编译器。可能还有其他类似的项目。

22

NumPy和MATLAB都使用一种叫做BLAS的基础库来处理常见的线性代数运算。之前这两个工具都用过ATLAS,但现在MATLAB似乎还支持其他一些实现,比如英特尔的数学核心库(MKL)。哪个更快、快多少,这个要看你的系统以及BLAS是怎么编译的。你也可以用MKL来编译NumPy,而Enthought正在为他们的Python版本提供MKL的支持(可以查看他们的路线图)。这里还有一篇最近的有趣的博客文章,讨论了这个话题。

另一方面,如果你需要更专业的操作或数据结构,Python和MATLAB都提供了多种优化的方法(比如CythonPyCUDA等)。

编辑:我更新了这个回答,以考虑不同的BLAS实现。我希望现在能更准确地反映当前的情况。

29

你可以在这个链接的底部找到一些有用的结果。

http://wiki.scipy.org/PerformancePython

在介绍部分,

对比了weave、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/

撰写回答