Matlab 考虑速度的预分配
我在做下面的事情Matlab 考虑速度的预分配,matlab,memory-management,Matlab,Memory Management,我在做下面的事情 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,:)];
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_芯片可能正在环路内增长。考虑速度的预分配。
有什么想法吗?有。每次你四处走动,你的elseif块都在调整symbol_芯片的大小,这很昂贵。相反,重写您的代码,这样您就可以说symbol_chip=zerosmax_size,1;在循环之前。然后,更改内容,但不更改symbol_芯片的大小
你需要稍微改变你的方法,但如果你这样做的话,速度会快得多。如果你对当前的速度不感到恼火,不要改变任何事情 M-Lint将抛出此警告,如果您有一个变量在循环中增长而没有预先分配。可以通过预分配集合变量来删除此错误 例如,如果您知道变量symbol_芯片最多包含i*j元素,则可以使用以下语句对其进行预分配:
symbol_chip = zeros(i*j);
然而,对于大多数应用程序,预分配对算法性能的影响微乎其微。如果您处理的是非常大的数据集,我只会担心这一点。对不起,我更正了它,它应该是else而不是elseiflet在外部for循环之前说的,我将符号_chip=zerosm*32,1;那么我该如何更改if-else语句呢?zerosij将创建一个包含ij行和ij列的二维数组。为了解决这个问题,请使用zerosij,1为了避免重复,在一个相关的问题中:,我展示了一种通过预先分配内存来提高性能的方法,同时在需要时通过添加更多内存空间来提高空间效率。您是否尝试过Matlab帮助???只需在任何Matlab窗口中按F1键,在搜索编辑字段中键入“preallocation”,然后按ENTER键。你会得到你所需要的!!!只是一句评论:这是最好的。