Matlab 将具有不同列大小的单元格数组重塑为矩阵
我需要将T1=[1x5]单元数组重新格式化,其中每个单元都是数字的[5x1]单元数组,变成S1=[m-by-n]数字矩阵。问题是初始单元数组T1在每个单元中可能有不同的行数-这意味着我没有一个方形数组来使用“cell2mat”函数 例如:Matlab 将具有不同列大小的单元格数组重塑为矩阵,matlab,reshape,Matlab,Reshape,我需要将T1=[1x5]单元数组重新格式化,其中每个单元都是数字的[5x1]单元数组,变成S1=[m-by-n]数字矩阵。问题是初始单元数组T1在每个单元中可能有不同的行数-这意味着我没有一个方形数组来使用“cell2mat”函数 例如: 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
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
我需要将所有列添加到一起:
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
然后将数组重新整形为[m-x-n]数组(始终为方形),在本例中为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
我想也许我可以将T1重新整形为[x-x-1]数组,然后将该数组整形为S1=[m-x-n]。但是我应该怎么做才能得到这样的结果:
T3=
1
2
3
4
...
24
而且不像
T3=
1
6
11
16
21
2
...
24
任何帮助都将不胜感激。一个策略是:
NaN
填充所有单元格数组元素,使其大小相同NaN
s% 1. Get maximum size of T elements
% Pad all elements of T up to maxn values with NaN
maxn = max(cellfun( @numel, T ));
Tpadded = cellfun( @(x) [x; NaN(maxn-numel(x))], T, 'uni', 0);
% 2. Convert to array.
Tpadded = cat( 2, Tpadded{:} );
% 3. Reshape to be one row and remove NaNs
Trow = reshape( Tpadded.', 1, [] );
Trow = Trow(~isnan(Trow));
% 4. Reshape to desired result
Tout = reshape( Trow, 8, 3 ).';
结果
Tout = [1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24]
请添加到目前为止您开发的代码。您需要提出比“矩形”更具体的形状标准。为什么
3 x 8
而不是4 x 6
或2 x 12
?您尝试过简单地转置T1吗?当你创建一个数组时,它总是沿着第一个维度进行,所以转置应该会得到你想要的结果谢谢你的帮助。这很有魅力。我确实研究了南斯的填充,但我错过了第2步和第3步。