- 論壇徽章:
- 0
|
本帖最后由 HyryStudio 于 2012-05-31 18:43 編輯
回復(fù) 23# crazyhadoop
其實MATLAB也只是針對一些矢量運算調(diào)用底層Fortran庫時速度很快,這部分和Python調(diào)用的庫是差不多的,所以MATLAB在這方面和NumPy,SciPy是一個級別的。
至于程序內(nèi)部的循環(huán)判斷等語句的執(zhí)行速度,據(jù)說最近的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
復(fù)制代碼 fib這樣的遞歸調(diào)用函數(shù)Python比MATLAB快40倍,很有可能MATLAB不能對大量的函數(shù)調(diào)用進行JIT優(yōu)化,因此非JIT優(yōu)化的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
復(fù)制代碼 對于pi_sum這樣的簡單的循環(huán)判斷程序,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
復(fù)制代碼 它的運算速度提高了30倍。 |
|