MATLAB Answers

Put matrix in cell

1 ビュー (過去 30 日間)
Na
Na 2018 年 12 月 10 日
編集済み: Stephen Cobeldick 2018 年 12 月 10 日
I have this matrix T=[ 3 6 1 12 7 10 6 0 0 22 0 15;
2 4 4 3 2 4 5 0 0 20 0 4;
0 1 0 2 0 2 0 0 0 17 0 16;
0 5 0 6 0 7 0 0 0 6 0 0;
0 0 0 0 0 28 0 0 0 0 0 0]
I want to put each column of matrix T in cell c like this (the result should be)
c={[3,2], [6,4,1,5], [1,4], [12,3,2,6], [7,2], [10,4,2,7,28], [6,5],[ ],[ ],[22,20,17,6],[ ],[15,4,16]}
insted of zero column put [ ]
do not put zero in the cell

  0 件のコメント

サインインしてコメントする。

採用された回答

Stephen Cobeldick
Stephen Cobeldick 2018 年 12 月 10 日
編集済み: Stephen Cobeldick 2018 年 12 月 10 日
Simpler:
>> T = [3,6,1,12,7,10,6,0,0,22,0,15;2,4,4,3,2,4,5,0,0,20,0,4;0,1,0,2,0,2,0,0,0,17,0,16;0,5,0,6,0,7,0,0,0,6,0,0;0,0,0,0,0
28,0,0,0,0,0,0]
T =
3 6 1 12 7 10 6 0 0 22 0 15
2 4 4 3 2 4 5 0 0 20 0 4
0 1 0 2 0 2 0 0 0 17 0 16
0 5 0 6 0 7 0 0 0 6 0 0
0 0 0 0 0 28 0 0 0 0 0 0
>> F = @(v)v(v~=0).';
>> C = cellfun(F,num2cell(T,1),'uni',0);
>> C{:}
ans =
3 2
ans =
6 4 1 5
ans =
1 4
ans =
12 3 2 6
ans =
7 2
ans =
10 4 2 7 28
ans =
6 5
ans =
[]
ans =
[]
ans =
22 20 17 6
ans =
[]
ans =
15 4 16

  0 件のコメント

サインインしてコメントする。

その他の回答 (1 件)

KSSV
KSSV 2018 年 12 月 10 日
T=[ 3 6 1 12 7 10 6 0 0 22 0 15;
2 4 4 3 2 4 5 0 0 20 0 4;
0 1 0 2 0 2 0 0 0 17 0 16;
0 5 0 6 0 7 0 0 0 6 0 0;
0 0 0 0 0 28 0 0 0 0 0 0] ;
c={[3,2], [6,4,1,5], [1,4], [12,3,2,6], [7,2], [10,4,2,7,28], [6,5],[ ],[ ],[22,20,17,6],[ ],[15,4,16]} ;
A = T(:)' ;
ii = zeros(size(A));
jj = A > 0;
ii(strfind([0,jj(:)'],[0 1])) = 1;
idx = cumsum(ii).*jj;
out = accumarray( idx(jj)',A(jj)',[],@(x){x'});

  1 件のコメント

Na
Na 2018 年 12 月 10 日
the codes gives me this result
c={[3,2], [6,4,1,5], [1,4], [12,3,2,6], [7,2], [10,4,2,7,28,6,5], [22,20,17,6],[15,4,16]}
but I want this result
c={[3,2], [6,4,1,5], [1,4], [12,3,2,6], [7,2], [10,4,2,7,28], [6,5],[ ],[ ],[22,20,17,6],[ ],[15,4,16]} ;

サインインしてコメントする。


Translated by