加速你的MATLAB開發(1): 自動生成MATLAB代碼

%%前言

博主決定挖一個新坑,簡單介紹如何加快MATLAB的開發和運行速度。這一類文章將涉及使用Profiler檢測性能瓶頸,自動代碼生成(MATLAB/C/C++), 使用Parallel Computing Toolbox讓你的代碼並行化或是跑在GPU上,甚至是雲端,以及個人經常使用的一些加速技巧。

開篇我們先來分享下很多人容易忽略的一個技巧,就是利用MATLAB中很多App自帶的代碼生成功能來加快開發速度。

%%正題

我問我們的俄羅斯實習生myc,寫C/C++和Java的時候最痛苦的是什麼?

讀寫文件

作為沒有受過CS專業訓練的工科生,我感同身受。下面是我每次需要寫FILE I/O時的流程圖

1. Google File I/O C++

2. 打開第一個搜索結果Input/output with files

3. 複製代碼,修改,編譯,運行

4. 發現自己的文件數據格式和教程裡面的不一樣

5. 再次Google,找有類似數據的教程

我又問myc, MATLAB裡面讀寫文件不也是類似的情況嗎?myc說,

nyet nyet nyet

我讀寫數據全靠滑鼠點

為了給我演示他的工作流程,myc從這裡下載了Uber 14年7月在紐約的所有接車記錄,一共796121行數據,格式如下

1. 點擊Import Data

2. 載入數據文件

3. 選取合適的數據結構

4. 選擇生成MATLAB代碼,完成

全程滑鼠點擊有沒有,鍵盤沒有敲過一下就寫了100多行代碼有沒有,各種複雜情況,對於缺失數據的處理都照顧到了有沒有

%%結語

MATLAB的很多App都會自帶生成MATLAB代碼的功能,比如

這裡

這裡

甚至這裡

看看生成的代碼和我們自己寫的有啥區別?

自己寫的

>>surf(peaks)n>>shading interpn

自動生成的

function createfigure(zdata1)n%CREATEFIGURE(ZDATA1)n% ZDATA1: surface zdatann% Auto-generated by MATLAB on 05-Apr-2016 10:03:24nn% Create figurenfigure1 = figure;nn% Create axesnaxes1 = axes(Parent,figure1);nhold(axes1,on);nn% Create surfnsurf(zdata1,Parent,axes1,FaceColor,interp,EdgeColor,none);nnview(axes1,[-37.5 30]);ngrid(axes1,on);n

可以看到自動生成的代碼是很具有普遍性的。

善用MATLAB代碼自動生成的功能可以加快雛形的開發,我們在開發演算法的過程中很容易忽略自己的開發效率。如果花1小時敲鍵盤,反覆試錯的時間可以轉換為幾次滑鼠點擊就能解決的任務,公司也就不會需要實習生了

myc: ???????

推薦閱讀:

機器學習筆記6 —— Matlab編程基礎
漫談Simulink: 隱式和顯式的Solver
MATLAB神經網路(六):GRNN

TAG:MATLAB | performance |