MATLAB一些小技巧

代码复用

MATLAB 的函数用起来很糟糕因为他没法默认访问工作区变量,如果声明 global 性能又极其差劲,如果传参又很麻烦。而且一个函数一个文件的操作有点窒息。

可以选择用 fun = @(x)x^2 这样的匿名函数来实现简单的操作,如果有复杂的工作,可以考虑在内部使用循环,在次数上做好判断,实现 function 的效果。

并行计算

如果工程量很大比如超过 40 分钟这种可以考虑一下并行计算不然我觉得还是多开几个 MATLAB 实例效率更高。笔记本跑真的超卡,鼠标都飞了。多开几台电脑也是很好的选择。

合理使用 save 和 load 命令能让你的工作简化并且让代码更加流畅

还能有效利用富余机器,方便数据整合。算、画分离大幅提高计算、编写效率。

存储数据要合理选择数据类型

如果确认只存数字那么 matrix 是很不错的,如果有字符串,table 很棒,或者如果有更复杂的数据类型,cell 或者定义好的 struct array 是将是你的好伙伴。

并行计算报错:在 PARFOR 循环中,对变量’iterResult’的索引采用了多种不同的方式,这可能会导致迭代之间出现依存关系

如果在代码里面,访问了索引 i 的多个下标,可能会出现上面这样的提示

1
2
3
4
5
6
7
8
9
10
11
12
13

% 示例代码

A=zeros(2,9);

parfor i=1:9

A(1,i)=1;

A(2,i)=1;

end

如果删掉A(2,i)=1;,只访问下标 1 就不会报错。这样的解决方法是,要么用一个 struct 数组存储循环结果,通过particle(i).Cost=xxx;particle(i).Position=xxx;这样的方式来存储数据,要么用一个1*n cell来存储数据,用法类似。

GPU 加速

GPU 理论上能够大幅加速矩阵运算。

但是反正我是没体验到加速,开了 GPU 计算(虽然是一张 P 系列绘图卡),比原来慢了好几倍。

MATLAB 很牛但是我真的不想写这玩意了


MATLAB一些小技巧
https://hunsh.net/archives/97/
发布于
2021年2月9日
许可协议