Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 考虑速度的预分配_Matlab_Memory Management - Fatal编程技术网

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键。你会得到你所需要的!!!只是一句评论:这是最好的。