为什么 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
我的程序中有一个单元格变量,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