Reshape array of cells with different column sizes into matrix
Ältere Kommentare anzeigen
Hi. I need to reshape a T1 = [1x5] cell array, where each cell is a [5x1] cell array of numbers into a S1 = [m-by-n] matrix of numbers. The problem is the initial cell array T1 may have different number of rows in each cell - meaning I don't have a square shaped array to use " cell2mat " function.
Example:
T1=[1x5] cell array
T1{1} T1{2} T1{3} T1{4} T1{5}
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24
I need to add all of the columns together:
T2=
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24
And then reshape the array into [m-by-n] array (always square shaped), in this example S1=[3x8]:
S1=
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
I thought that maybe I could reshape T1 into [x-by-1] array and then reshape that array in to S1=[m-by-n]. But what should i do in order to get results like this:
T3=
1
2
3
4
...
24
And not like
1
6
11
16
21
2
...
24
Any help would be appreciated.
1 Kommentar
Stephen23
am 7 Dez. 2017
@Ardo Laaneots: is the shorter vector always the last one in the cell array?
Akzeptierte Antwort
Weitere Antworten (1)
KL
am 7 Dez. 2017
One approach is to make all elements equal in size by padding 0s or nans and then use cell2mat,
m = max(cellfun(@numel,T1));
for k = 1:numel(T1)
n = numel(T1{k});
if n<m
T1{k} = [T1{k}; nan(m-n,1)];
end
end
T2 = cell2mat(T1)'
Kategorien
Mehr zu Cell Arrays finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!