Почему Matlab предупреждает о предварительном выделении переменной, которая получает сброс каждый цикл?
В моей программе есть переменная ячейки, которую 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
на пустую переменную в каждом цикле.
Обновить:
Я нашел способ, подсказанный ответом Ли, но все еще не знаю почему. С помощью a = [a(:),{'def'}];
вместо a = [a,{'def'}];
решил предупреждение.
1 ответ
Ты сделал 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