我们知道MATLAB擅长矩阵计算,但对于跑for循环非常低效,因此在内存足够的情况下应尽量写成矩阵或者向量化操作的形式,善用更好的数据结构、算法,以及matlab自带的函数特性,以尽可能避免for循环降低运行速度。下面是我学到的一些小tips,并结合运算示例进行讲解。
方法1:优化循环内部运算及嵌套
例如:
将计算量小、循环次数多的放在里面,计算量大循环次数少的放在外面做大循环;
将表达式尽可能向量化计算好后再放入循环内,减少循环內部运算;
方法2:多线程并发替代单循环
for i = 1 : 100
a[i] = xxx;
end
优化:
for i = 1 : 25
a[i] = xxx;
a[i + 1] = xxx;
a[i + 2] = xxx;
a[i + 3] = xxx;
i = i + 4;
end
方法3:向量化处理
向量化操作这个过程将向量扩展为更大的索引矩阵,以尽可能替代for循环,本质是用空间换时间。MATLAB中有 repemat, repelem, keron, bsffun, arrayfun 或 sub2ind 以及ind2sub 等函数,充分利用这些自带函数特性非常重要,下面我们举一些应用实例:
sub2idx函数用于索引多维矩阵进行赋值
有一个矩阵,上面有索引和需要赋予的数值,需要把对应的数值赋予到三维数组中&