使用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。