2
votes

I have a cell in Matlab composed as follow, where each entry can have multiple integer. For instance:

 A=cell(2,10);
 A{1,1}=[5];
 A{1,2}=[5 7];
 A{1,3}=[5];
 A{1,4}=[5];
 A{1,5}=[5];
 A{1,6}=[5];
 A{1,7}=[5];
 A{1,8}=[5];
 A{1,9}=[5];
 A{1,10}=[5];

 A{2,1}=[5];
 A{2,2}=[3];
 A{2,3}=[1];
 A{2,4}=[5];
 A{2,5}=[2];
 A{2,6}=[6];
 A{2,7}=[2];
 A{2,8}=[2];
 A{2,9}=[1];
 A{2,10}=[5 4];

I would obtain a Matrix which contains the elements of the cells. When the rows in the cells contain multiple entry (for example A{1,2}) the entry should be included (all of them) one time. For instance the Matrix output should be:

  B=[5 5 5 5 5 5 5 5 5 5; %A{1,:}first column in the cell
  5 7 5 5 5 5 5 5 5 5; %A{1,:}first column and the second element in row       
                       A{1,2}
  5 3 1 5 2 6 2 2 1 5;
  5 3 1 5 2 6 2 2 1 4];

Could you help me? Thanks in advance

1

1 Answers

1
votes

This will do it:

[r,c]= size(A);   %Finding the size of A for the next step
B=zeros(r*2,c);   %Pre-allocating the memory
for iter=1:r
    k=find(cellfun('length',A(iter,:))==2); %finding which elements have length =2
    temp=cell2mat(A(iter,:));   %converting cell to matrix
    k1= k+ [0:size(k,2)-1];     %finding which elements should come in the next row instead of in next column

    temp1= temp(k1+1);          %storing those elements in 'temp1' matrix
    temp(k1+1)=[];              %removing those elements from original 'temp' matrix

    B(2*(iter-1)+1:2*(iter-1)+2, :)=[temp; temp];  
    B(2+(iter-1)*2,k)=temp1;    %replacing the elements from temp1
end
B