2016-09-09 43 views
2

我在Matlab中有一个单元格,其组成如下,其中每个条目可以有多个整数。 例如:在Matlab中有多列到矩阵的单元格

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]; 

我会得到包含细胞的元素的矩阵。当单元格中的行包含多个条目(例如A {1,2})时,应该包含条目(所有条目)一次。例如矩阵输出应该是:

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]; 

你能帮我吗? 在此先感谢

回答

1

这将做到这一点:

[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 
+0

非常感谢,我有一个问题。单元格每行内的元素数量可能包含2个以上的元素。实际上,在我的代码中包含您的优秀代码时,我收到此消息错误: “订阅分配维度不匹配”。 你能帮我吗? – Noris

+0

@Noris你不能根据你的实际问题修改它吗?此外,你没有提到你的期望输出将会是超过2个元素的情况!我只能根据你提供的信息来回答! –