我正在做以下
for i = 1:m,
index = 0;
for j = 1:n,
index = index+values(i,j)*2^(j-1);
if (j==1)
symbol_chip = chip_values(index+1,:);
else
symbol_chip = [symbol_chip chip_values(index+1,:)];
end
end
end
它告诉我以下内容:
symbol_chip
可能会在循环中增长。考虑预先分配速度。
有什么想法吗?
答案 0 :(得分:10)
是。每次您到处走动时,elseif
区块都会调整symbol_chip
的大小,这很昂贵。相反,重写代码,以便在循环之前(例如)symbol_chip = zeros(max_size, 1);
。然后,更改内容,但不更改symbol_chip
的大小。
您需要稍微改变一下您的方法,但如果您这样做会更快。如果你不对目前的速度感到恼火,不要改变任何东西!
答案 1 :(得分:2)
如果你有一个变量在循环内增长而没有预先分配,M-Lint会抛出这个警告。您可以通过预先分配集合变量来删除此错误。
例如,如果你知道变量symbol_chip最多只有i * j个元素,你可以用语句预先分配它:
symbol_chip = zeros(i*j);
但是,对于大多数应用程序,预分配对算法性能的影响可以忽略不计。如果你处理非常大的数据集,我只会担心它。