HyryStudio2012-05-06 19:57
garcialook: 你好,我是一位python的爱好者,我想用python进行数值计算,但我发现同样的思路与流程,python的运行速度远慢于fortran的速度。这导致我不可能继续用python作为.....
用Python做计算的目的不是为了运算速度快,而是为了开发快,这一点和MATLAB是类似的。就你给出的网址中的那种循环,Python可能会比C或Fortran慢100倍。
Python的数值计算通常会用NumPy, SciPy这样的扩展库。如果有些任务不能用扩展库完成,会考虑使用C、Fortran或者Cython提高运算速度。
写程序的时候不要过早的开始考虑运算速度以及如何优化计算时间,Donald Knuth曾经说过:
"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil"
用Python开发计算程序的一般步骤是:
1. 首先考虑尽量用扩展库提供的函数解决,避免Python语言的大量循环。
2. 1无法实现时,就用Python实现。如果计算时间可以接受就OK了。
3. 如果无法忍受,就要考虑优化了。优化之前先做Profile,找到需要优化的部分。通常需要优化的部分只占整个程序的很小的一部分。
4. 优化可以考虑尝试新的算法,使用更合适的数据结构。
5. 如果一切Python级别的优化都失败了,那么就用C,Fortran或者Cython将那一部分重写。其中Cython和Python的语法很接近,它将带有类型声明的Python程序翻译成C语言然后编译成扩展程序。现在越来越多的扩展库采用Cython编写。