2015-02-25 4 views
1

В MATLAB У меня есть массив 32x1 символов А такое, чтоКак переназначить четные и нечетные индексы массива символов в новый массив меньших символов в Matlab?

A = {'F1' 'F2' 'F3' 'F4' 'F5' 'F6' ... 'F32'}; 
A = A'; 

Теперь я пытаюсь сделать следующее с А. Для каждого четного индекса значения

A{2}, A{4}, A{6}...

Я хочу чтобы присвоить эти значения массиву символов 16x1, а для нечетных индексов AI необходимо присвоить эти значения другой матрице 16x1 C.

Я использую следующий код:

for i=1:32 
if mod(i,2)==0 
    B{i} = A{i}; 
else 
    C{i} = A{i}; 
end 
end 

и он работает, но только частично, потому что он присваивает правильные значения для, например, B{2} and B{4}, но значения в B{1} and B{3} такие же, как в B{2} and B{4}.

Может ли кто-нибудь сказать мне, как переназначить четные и нечетные индексы массива символов в новый массив меньших символов? Моя проблема в том, что я перехожу из 32x1 в 16x1, и я не уверен, как избежать дополнительных 16 записей.

Большое спасибо!

+3

Почему не просто 'B = A (2: 2: конец); C = A (1: 2: конец); '? –

+0

Пробовал это, прежде чем публиковать это, но это не сработало, так как @thewaywewalk предложил с 'сделкой' работал! –

ответ

2

Чтобы получить реальный ответ на этот вопрос, используйте идею Luis Mendo в комментариях. Вы можете комбинировать его с deal, чтобы сохранить одну строку кода:

[B, C] = deal(A(2:2:end), A(1:2:end)) 

Чтобы сделать вашу работу цикла, вам нужен второй индекс бега jj:

A = {'F1' 'F2' 'F3' 'F4' 'F5' 'F6'}; 

for ii = 1:6 
    jj = ceil(ii/2); 
    if mod(ii,2)==0 
     B{jj} = A{ii}; 
    else 
     C{jj} = A{ii}; 
    end 
end 
+0

спасибо огромное, не знал 'deal' существовал .. сейчас я! огромное спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^