2016-10-05 10 views
1

У меня есть 6 х 12 клетки (так называемый М) как этотСоединить клетки

[1 1 1 1] [2 2 2 2] ... [12 12 12 12] 
[13 13 13 13] [14 14 14 14] ... [24 24 24 24] 
... 
[61 61 61 61] [62 62 62 62] ... [72 72 72 72] 

Я хотел бы вертикально конкатенации таким образом, матрица станет 1 х 12 клеток, которые должны выглядеть следующим образом:

[1 1 1 1 13 13 13 13 ... 61 61 61 61] [ 2 2 2 2 14 14 14 14 14 ... 62 62 62 62] ... 
... 

Я пробовал vertcat, например vertcat(M{1,1}, M{2,1}), но это не работает. Может ли кто-нибудь помочь?

+0

некоторые для петель будет делать трюк. Кроме того, к ячейкам обращаются фигурные скобки, а не скобки –

+0

Привет Андер, не могли бы вы рассказать о петлях? Я не совсем получаю «некоторые для циклов». И ты прав насчет фигурных скобок. Извините, это исправлено. –

ответ

5

Если все содержимое ячеек имеет одинакового размера, так как в вашем примере вы можете объединить все в матрицу и затем преобразовать в массив ячеек:

result = mat2cell(cell2mat(M.'), ones(1,size(M,2))).'; 

В качестве примера, для

M = { [1 1 1 1] [2 2 2 2] 
     [13 13 13 13] [14 14 14 14] 
     [61 61 61 61] [62 62 62 62] }; 

это производит

result{1} = 
    1  1  1  1 13 13 13 13 61 61 61 61 
result{2} = 
    2  2  2  2 14 14 14 14 62 62 62 62 
1

Что-то, как это будет делать работу:

% test data 
M{1,1}=[1 1];M{1,2}=[2 2]; 
M{2,1}=[3 3];M{2,2}=[4 4]; 
M{3,1}=[5 5];M{3,2}=[6 6]; 


newcell=cell(1,size(M,2)); 

for ii=1:size(M,2) 
    newarray=[]; 
    newarray=[newarray, M{:,ii}]; %catch next array and contatenate 
    newcell{ii}=newarray; 
end 
+1

Я считаю, что цикл 'for jj' может быть (эффективно IMHO) заменен на' newcell {ii} = horzcat (M {:, ii}) '. И избегает растущих массивов в памяти. –

+0

Это отлично работает! Спасибо огромное! –

+0

@ A.Rainer спасибо! Однако, если ваши матрицы имеют одинаковый размер, возможно, ответы CST-link и Luis лучше. ;) –

2

Я в arrayfun ра (м) страница так, мой 50 Cent s из MATLAB:

result = arrayfun(@(x) [M{:,x}], 1:12, 'UniformOutput', false); 

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

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