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

问题描述 投票:2回答:3

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

这条新线路还有另一个警告,预分配的细节说:

建议的操作:避免将内存预分配给分配给另一个函数输出的变量。

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

matlab allocation
3个回答
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


5
投票

只需在行尾添加特殊的%#ok注释,它将禁用与此行相关的所有警告:

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

您还可以使用特殊的%#ok<specific1, ...>注释来禁用非常具体的警告但不禁用其他警告。检查这个link的详细信息。


4
投票

您可以在“首选项”中将其停用:

(Matlab 2013b)

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

编辑:I was wrong.

© www.soinside.com 2019 - 2024. All rights reserved.