MATLAB — alternative ways

Paul Tang
4 min readJan 15, 2017

--

最近在研究是否有軟體能夠取代MATLAB,因為專業授權太貴了,一般業界除非演算法部門不然也應該不會有授權,因此萌生了尋找替代軟體的方案。

搜索了一下,有幾個軟體或是套件滿適合的,我主要是在做影像處理以及訊號處理,也常常需要繪圖,因為使用MATLAB軟體好幾年了,語法也比較熟悉MATLAB,因此找語法相近的

1. GNU Octave: 指令上來說應該是最貼近MATLAB原生語法的軟體,我在Windows 10安裝Octave with GUI,網址是:https://ftp.gnu.org/gnu/octave/windows/ ,可以直接下載exe 安裝檔,如果是Ubuntu的則需要自行configure並且compile原始碼。 (sudo apt-get install cotave下來的版本不是最新的,會有一些package不能用,例如Image)

網路上有找到編譯的方法,如下網址:

http://askubuntu.com/questions/645600/how-to-install-octave-4-0-0-in-ubuntu-14-04

我針對了矩陣運算進行測試,讓他跑了下面的運算,以我的電腦Intel i5 7200U的CPU來跑

>> b = rand(10⁴,10⁴);>> a = rand(10⁴,10⁴);>> tic;c = a*b;toc;Elapsed time is 116.317 seconds.

而MATLAB的結果

>> b = rand(10⁴,10⁴);>> a = rand(10⁴,10⁴);>> tic;c = a*b;toc;Elapsed time is 34.349096 seconds.

MATLAB還是比較快,因為MATLAB背後使用的是Intel的MKL (Math Kernel Library)

而Octave背後則是使用openBLAS

或許是這邊出了問題。不過Octave免費,也有很多人持續的貢獻,我想簡單跑一些簡單的作業是可以的。

此外,Octave非常不適合用for loop,雖然MATLAB也一樣,不過Octave用for迴圈會讓效能更加下降。

2. Scilab — 是一個由法國國立計算機及自動化研究院開發的一個數值運算軟體,其大部分的語法與MATLAB類似,只有少部分不同。

值得一提的是,他的背後運算模型也是使用MKL ,因此速度上我認為比Octave快。

原本想要跑一個和上面一樣的範例,不過因為目前他的stack size似乎有限制,因此要先經過

stacksize(‘max’)

這個步驟讓我們把stack memory開到最大。

有關於stack and heap memory的問題可以看這篇這篇

不過很遺憾的,目前仍然不能跑,還是出現stack memory不足的問題,如果可以跑測試,我會再補上。

目前先跑1000 x 1000 rand matrix

 →stacksize(‘max’);

→a = rand(1000,1000);

→b = rand(1000,1000);

→tic;c = a*b;toc
ans =

0.043

MATLAB

>> a = rand(1000,1000);
>> b = rand(1000,1000);
>> tic;c = a*b;toc
Elapsed time is 0.042675 seconds.

Octave

>> b = rand(1000,1000);
>> a = rand(1000,1000);
>> tic;c = a*b;toc
Elapsed time is 0.11033 seconds.

可以看到還是Octave效能最差

這篇文章主要以數值運算軟體為主,當然還有最近更熱門的Python + numpy + scipy,不過下次再分享吧。

--

--

Paul Tang
Paul Tang

Written by Paul Tang

初來乍到,剛到東京的菜鳥後端工程師,希望有一天能成為獨當一面的Full Stack Hacker

No responses yet