如何在这种情况下删除预分配警告

时间:2014-04-17 13:37:08

标签: matlab allocation

使用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));

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

  

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

有没有办法删除此警告,或者应该忽略它?

3 个答案:

答案 0 :(得分:4)

您可以在偏好设置

中停用它

enter image description here

(Matlab 2013b)

我认为不可能在单个脚本的某个循环中抑制此特定警告,只是全局。 它与命令窗口中显示的警告不同,它们可以是suppressed individually

修改:I was wrong.

答案 1 :(得分:4)

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

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

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

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

有关详细信息,请参阅this thread

答案 2 :(得分:4)

只需在该行的末尾添加特殊%#ok条评论,它就会停用与该行相关的所有警告:

hnds = zeros(1,length(E)); %#ok

您还可以使用特殊%#ok<specific1, ...>注释来仅禁用非常具体的警告,而不禁用其他警告。查看此link了解更多详情。