MATLAB循环中变量动态扩容警告的消除方法咨询
解决MATLAB中「Variable appears to change size on every loop iteration」警告的方法
因为你无法提前知晓变量最终大小,且变量规模很小,以下几种方法可以在不改变核心算法逻辑的前提下消除警告:
方法1:用单元格数组收集元素,最后转普通数组
单元格数组的元素扩展操作不会触发该警告,适合小数据量场景:
removed = {}; % 初始化单元格数组 while condition [...] removed{end+1} = worst; % 向数组添加元素 end removed = cell2mat(removed); % 转换为普通数值数组 disp(removed);
方法2:临时关闭特定警告
直接屏蔽引发警告的规则,完全保留原代码结构:
% 保存当前警告状态并关闭目标警告 warnState = warning('off','MATLAB:arraySizeChanged'); removed = []; while condition [...] removed = [removed, worst]; end disp(removed); % 可选:恢复之前的警告状态 warning(warnState);
方法3:预分配足够大的初始数组,最后截断
既然变量规模小,预估一个远大于实际需求的初始大小,用计数器跟踪实际元素数量,最后截断到真实长度:
maxSize = 100; % 根据你的预估设置,比如100 removed = NaN(1, maxSize); count = 0; while condition [...] count = count + 1; removed(count) = worst; end removed = removed(1:count); % 截断到实际元素数 disp(removed);
内容的提问来源于stack exchange,提问作者Gildos
相关产品推荐
相关产品推荐

