使用for循环绘制一组图形时,例如:

for ei=1:length(E),
  hnds(ei) = plot(1:nP, avgR(ei,:), [clrStr(ei),'-'] );
end


hnds(ei)变量的代码中有一个(著名的)警告:


变量hnds(ei)似乎在每次循环迭代时都会更改大小。
考虑预先分配速度。


但是当我尝试预分配变量时:

hnds = zeros(1,length(E));


此新行还有另一条警告,在预分配的详细信息中说:


建议采取的措施:避免将内存预先分配给分配给
另一个函数的输出。


有什么办法可以消除此警告,还是应该忽略它?

最佳答案

您可以尝试以相反的顺序进行迭代以避免警告:

for ei=length(E):-1:1,
    hnds(ei) = plot(1:nP, avgR(ei,:), [clrStr(ei),'-'] );
end


在这种情况下,您不需要预先分配(即没有hnds = zeros(1,length(E));)。

通过以相反的顺序进行迭代,可以在第一次迭代中确定数组大小hnds,并在整个迭代过程中保持固定不变。

有关更多信息,请参见this thread

10-06 12:54