MATLAB for循环的改善方法
前段时间做了大数据仿真计算,计算了百万个样本,其中采用了for循环结构,居然花费了半天的时间才运行完,那么如何改善这个循环体使它能花费更短的时间来运行。我采用了将for循环改变成多维向量计算的方法。
测试代码(截取)如下:
for step=1:100
sigma=0;
data_f1=[];
data_f2=[];
data_f=[];
for i=1:m;
if ((i>=(step+1))&(i<=m-step))
for j=-step:step
sigma=sigma+(csv(i-j,3)-1)^2;
end
f1=(sigma./(2*step)).^0.5;
data_f1=[data_f1;f1];
sigma=0;
else
f2=abs(csv(i,3)-1);
data_f2=[data_f2;f2];
end
data_f=[data_f2(1:step,:);data_f1;data_f2((step+1):(2*step),:)];
[P1_fi,p]=corr(csv(1:m,1),data_f);
data_corr=[data_corr;P1_fi];
end
我们看到,在这个结构中,为了计算样本在定义公式下的值,包含有3个for循环嵌套结构和一个if条件语句,尽管工作重复但是在上百万个样本下Matlab运行速度还是非常慢的。