kam*_*ame 36 python performance matlab matrix
我想使用Biot-Savart定律计算某些导体的磁场,我想使用1000x1000x1000矩阵.在我使用MATLAB之前,现在我想使用Python.Python比MATLAB慢吗?如何让Python更快?
编辑:也许最好的方法是使用C/C++计算大数组,然后将它们转移到Python.我想用VPython进行可视化.
编辑2:在我的情况下哪个更好:C或C++?
pet*_*tik 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/
nik*_*kow 19
NumPy和MATLAB都使用基础BLAS实现来进行标准线性代数运算.有一段时间都使用了ATLAS,但现在MATLAB显然还带有其他实现,如英特尔的数学核心库(MKL).哪一个更快取决于系统以及如何编译BLAS实现.你也可以使用MKL编译NumPy,而Enthought正在为他们的Python发行版支持MKL(参见他们的路线图).这也是最近有趣的博客文章.
另一方面,如果您需要更专业的操作或数据结构,那么Python和MATLAB都为您提供了各种优化方法(如Cython,PyCUDA,......).
编辑:我更正了这个答案,以考虑不同的BLAS实现.我希望现在能够公平地反映现状.
唯一有效的测试是对它进行基准测试.这实际上取决于您的平台是什么,以及Biot-Savart Law如何映射到Matlab或NumPy/SciPy内置操作.
至于加快Python的速度,谷歌正在开发Unladen Swallow,一个用于Python的JIT编译器.可能还有其他类似的项目.
根据您的编辑 2,我强烈建议您使用 Fortran,因为您可以利用可用的线性代数子例程(Lapack 和 Blas),并且在矩阵计算方面它比 C/C++ 简单得多。
如果您更喜欢使用 C/C++ 方法,我会使用 C,因为您大概需要在一个大概简单的接口上的原始性能(矩阵计算往往具有简单的接口和复杂的算法)。
但是,如果您决定使用 C++,则可以使用 TNT(模板数值工具包,Lapack 的 C++ 实现)。
祝你好运。