2016-12-17 7 views
0

В моей программе есть переменная ячейки, которую Matlab предупреждает о ее распределении. Простая форма кода STH так:Почему 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 в каждом цикле.

Update:

Я нашел способ, намекают ответ Ли, но до сих пор не знает, почему. Использование a = [a(:),{'def'}]; вместо a = [a,{'def'}]; решило предупреждение.

ответ

0

Вы сделали 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 
+0

Спасибо за ответ. Как я добавил в своем вопросе, мне нужно «а», чтобы получить пустую в начале каждого цикла. Поэтому я не могу установить его на {'a1'}. Что еще я могу сделать? Еще раз спасибо. –

+0

Просто замените ваш 'a = []' на 'a = {}' – Lee

+0

Да, правильно. Большое спасибо Ли. –