2016-05-17 2 views
0

У меня есть ячейка с неравными размерами двойных элементов.Разверните элементы ячеек столбца в матрице

Например

cc2 = 
[1x32 double]  
[1x3 double]  
[1x3 double] 
[1x2 double]  
[1x457 double]  
[1x200 double] 
[1x23 double]    
[1x10 double] 
. 
.  
[so on] 

Каждый элемент ячейки 1xn где n>=2

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

Я пытался что-то вроде этого, но это не работает

lens = sum(cellfun('length',cc2(:,1)),2); 
out = zeros(numel(lens),max(lens)); 
out(bsxfun(@le,[1:max(lens)],lens)) = horzcat(cc2{:}); 

Отдельные элементы расширяющийся рядам, но мне нужно их расширить столбцы.

Например

input = {[1,2,3];[4];[5,6]}; 
output = [1,2,3;4,0,0;5,6,0]; 

Может кто-то пожалуйста, помогите?

Спасибо!

+1

Что именно вы ожидаете от своего вывода? Вы хотите, чтобы он дополнялся нулями? – Suever

+0

Да, с нулями в порядке, но я хочу, чтобы они расширялись! –

ответ

1

Что

разверните каждый элемент ячейки по столбцам в ее состав удваивается

означает? Можете ли вы представить пример ввода и вывода. Так, например, если ваш вход

C = {[1,2,3]; 
    [4]; 
    [5,6]} 

Тогда что вы хотите в качестве выхода?

Если вы хотите, чтобы это

E = [1,2,3,4,5,6] 

попробуйте

E = [C{:}] 

Если вы хотите

E = [1,2,3; 
    4,0,0; 
    5,6,0] 

Затем попробовать что-то похожее на this answer:

n = max(cellfun(@(x)size(x,2),C)) 
Ecell = cellfun(@(x)[x, zeros(1,n-numel(x))], C, 'uni', 0); 
E = cat(1,E{:}) 

Обратите внимание, что Ecell в коде выше будет равна

Ecell == {[1,2,3]; 
      [4,0,0]; 
      [5,6,0]} 

, который является еще одним действительным толкование Вашего вопроса.

+0

Я хочу E = [1,2,3; 4,0,0; 5,6,0]; –

+1

@ EyesOfÖzil, пожалуйста, добавьте это на ваш вопрос. Кроме того, мой ответ обновлен кодом для этого. – Dan

+0

Да, это то, что я искал. Спасибо! –

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