我有一系列嵌套循环,用于将数据存储在单元格数组中。我试图找到加快循环的方法,也有助于简化可读性。我已经对循环进行了一些优化,但我想看看是否可以进一步对其进行矢量化。我原来的代码看起来像这样:
%% ORIGINAL LOOP
for iA = 1:length(arrA)
for iB = 1:length(arrB)
for iC = 1:length(arrC)
a = arrA(iA); % depends only on iA
a_x = AData.x(AData.a==a);
a_y = AData.y(AData.a==a);
b = arrB(iB); % depends only on iB
b_x = BData.x(BData.b==b);
b_y = BData.y(BData.b==b);
c = arrC(iC); % depends only on iC
FinalData{iA,iB,iC} = computedata(a_x, a_y, b_x, b_y, c);
end
end
end
由于a, a_x, a_y
的计算仅依赖于iA
,我将它们从内部循环中拉出来,并且对其他变量做了类似的操作,这显着提高了性能:
%% FASTER LOOP
for iA = 1:length(arrA)
a = arrA(iA);
a_x = AData.x(AData.a==a);
a_y = AData.y(AData.a==a);
for iB = 1:length(arrB)
b = arrB(iB);
b_x = BData.x(BData.b==b);
b_y = BData.y(BData.b==b);
for iC = 1:length(arrC)
c = arrC(iC);
FinalData{iA,iB,iC} = computedata(a_x, a_y, b_x, b_y, c);
end
end
end
我想知道是否有更好的方法来加速这个过程,也许是通过MATLAB矢量化(完全消除循环)。
我还想让它更紧凑,更容易重新排列循环的顺序,如果需要,我计划设计用于绘制各种顺序的东西的其他功能。任何提示将不胜感激。