0

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

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

首先我想知道为什么a应该预先分配,因为它在每个循环中都会被重置。其次,我不知道如何预先分配它。当我尝试这样做时,Matlab 给了我另一个警告,说“变量似乎是预分配的,但这里不推荐预分配”。

我在循环之前使用此代码:

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在每个循环中重置为一个空 var。

更新:

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

4

1 回答 1

0

您创建了a一个新变量,因此a = cell(1,2)从未使用过前者,这使得 matlab 提出了警告。

你可以使用 sth like

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

或者如果你真的想改变 的大小a

for ii = 1:2
    a = {'a1'};
    a = [a(:); {'abc'}];
end
于 2016-12-17T23:53:58.017 回答