- 论坛徽章:
- 0
|
本帖最后由 HyryStudio 于 2012-05-31 18:43 编辑
回复 23# crazyhadoop
其实MATLAB也只是针对一些矢量运算调用底层Fortran库时速度很快,这部分和Python调用的库是差不多的,所以MATLAB在这方面和NumPy,SciPy是一个级别的。
至于程序内部的循环判断等语句的执行速度,据说最近的MATLAB有JIT,可以大幅度提高程序的运算速度,不过我很久没有用过MATLAB了,不太清楚。
最近有一个新的语言Juila,它提供了一个简单的运算速度比较:
http://julialang.org/
从那个比较的表格可以看出:- def fib(n):
- if n<2:
- return n
- return fib(n-1)+fib(n-2)
- 运行速度比较
- Python 31.47
- matlab 1336.37
- Javascript(V8) 1.55
复制代码 fib这样的递归调用函数Python比MATLAB快40倍,很有可能MATLAB不能对大量的函数调用进行JIT优化,因此非JIT优化的MATLAB代码可能比Python慢。而Javascript的V8引擎能进行JIT,因此又比Python快20倍。- def pisum():
- sum = 0.0
- for j in xrange(1, 500):
- sum = 0.0
- for k in xrange(1, 10000):
- sum += 1.0/(k*k)
- return sum
- 运行速度比较
- Python 18.03
- matlab 1.08
- Javascript(V8) 0.75
复制代码 对于pi_sum这样的简单的循环判断程序,MATLAB可能做了JIT,因此比Python快18倍,而MATLAB的JIT略逊于Javascript(V 。
但是我用Cython将pisum重新写了一下:- def pisum2():
- cdef double sum
- cdef int j, k
- sum = 0.0
- for j in range(1, 500):
- sum = 0.0
- for k in range(1, 10000):
- sum += 1.0/(k*k)
- return sum
复制代码 它的运算速度提高了30倍。 |
|