Почему 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
Другие вопросы по тегам