%%前言博主决定挖一个新坑,简单介绍如何加快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++

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)

>>shading interp

自动生成的

functioncreatefigure(zdata1)%CREATEFIGURE(ZDATA1)
% ZDATA1: surface zdata
% Auto-generated by MATLAB on 05-Apr-2016 10:03:24
% Create figure
figure1 = figure;
% Create axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');
% Create surf
surf(zdata1,'Parent',axes1,'FaceColor','interp','EdgeColor','none');
view(axes1,[-37.5 30]);
grid(axes1,'on');

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

善用MATLAB代码自动生成的功能可以加快雏形的开发,我们在开发算法的过程中很容易忽略自己的开发效率。如果花1小时敲键盘,反复试错的时间可以转换为几次鼠标点击就能解决的任务,公司也就不会需要实习生了myc: ???????