MATLAB一些小技巧

in 默认分类 with 0 comment

代码复用

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

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

并行计算

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

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

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

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

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

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

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

% 示例代码
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很牛但是我真的不想写这玩意了

Responses