为什么 matlab 警告预分配每个循环都会重置的变量?

Why does matlab warn to preallocate a variable which is getting reset every loop?

我的程序中有一个单元格变量,Matlab 警告要对其进行预分配。代码的简单形式是这样的:

for i = 1:2
    a = [];
    a = [a,{'abc'}];
end

首先我想知道为什么 a 应该被预分配,因为它在每个循环中都会被重置。其次,我不知道如何预分配它。当我尝试这样做时,Matlab 又给我一个警告,说 "The variable appears to be preallocated, but preallocation is not recommended here".

我在循环之前使用这段代码:

a = cell(1,2);

更具体地说:

for i = 1:2
    a = [];
    if condition1
        a = {'abc'};
    end
    if condition2
        a = [a,{'def'}];
    end
    b = [{'string'},a];
end

如果条件不成立,我希望 b 成为 1x1 元胞数组,因此我需要在每个循环中将 a 重置为空变量。

更新:

我找到了一种方法,Lee 的回答暗示了这一点,但仍然不知道为什么。使用 a = [a(:),{'def'}]; 而不是 a = [a,{'def'}]; 解决了警告。

你把a改成了一个新的变量,所以之前的a = cell(1,2)没有被使用,这让matlab报了警告。

你可以使用

a = cell(1,2);
for ii = 1:2
    a{ii} = 'abc';
end

或者如果您真的想更改 a

的大小
for ii = 1:2
    a = {'a1'};
    a = [a(:); {'abc'}];
end