我想使用Biot-Savart 定律计算一些导体的磁场,需要使用一个1000x1000x1000的矩阵。以前我用MATLAB,但现在我想用Python。Python比MATLAB慢吗?如何使Python更快?
编辑: 也许最好的方法是使用C/C++计算大数组,然后将它们转移到Python中。我想使用VPython进行可视化。
编辑2:在我的情况下,哪种语言更好:C还是C++?
我想使用Biot-Savart 定律计算一些导体的磁场,需要使用一个1000x1000x1000的矩阵。以前我用MATLAB,但现在我想用Python。Python比MATLAB慢吗?如何使Python更快?
编辑: 也许最好的方法是使用C/C++计算大数组,然后将它们转移到Python中。我想使用VPython进行可视化。
编辑2:在我的情况下,哪种语言更好:C还是C++?
你可能会在这个链接底部找到一些有用的结果。
http://wiki.scipy.org/PerformancePython
从简介中可以看出,它比较了使用Weave、NumPy、Pyrex、Psyco、Fortran(77和90)以及C++求解Laplace方程的性能。
它还将MATLAB进行了比较,并且似乎显示使用Python和NumPy与使用MATLAB时速度相似。
当然,这只是一个具体的例子,你的应用程序可能会有更好或更差的性能。在两者上运行相同的测试并进行比较是没有坏处的。
你也可以使用优化库编译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以及其优化程度。
这个链接列出了许多语言的面向对象数值计算包。
另一方面,如果您需要更专业的操作或数据结构,则 Python 和 MATLAB 均提供各种优化方式(例如 Cython, PyCUDA,...)。
编辑:我更正了这个答案,考虑到不同的BLAS实现。希望现在它能够公平地反映当前情况。
唯一有效的测试是进行基准测试。这实际上取决于您的平台以及Biot-Savart定律如何映射到Matlab或NumPy/SciPy内置操作。
至于使Python更快,Google正在开发Unladen Swallow,这是一个针对Python的JIT编译器。可能还有其他类似的项目。
double
(他们最近才开始支持无符号8位),这意味着我们不得不用C或C++编写一些算法来加速它们。因此,我编写了一个库作为各种实现的一层,这样我们的开发人员只需要处理一个API。有些算法仍然太慢,必须用汇编重写。话虽如此,我不明白我的回答哪里有误导之处。 - Mike DeSimonehttp://dpinte.wordpress.com/2010/03/16/numpymkl-vs-matlab-performance/
点积并不那么慢 ;-)
我无法找到很多硬数据来回答这个问题,所以我自己进行了测试。结果、脚本和数据集都可以在我发布的MATLAB与Python振动分析速度比较文章中找到。
长话短说,MATLAB中的FFT函数比Python更好,但你可以进行一些简单的操作来获得可比较的结果和速度。我还发现,即使是对于使用scipy.io的MAT文件,在Python中导入数据也比MATLAB更快。