Matlab 将具有不同列大小的单元格数组重塑为矩阵

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]单元数组重新格式化,其中每个单元都是数字的[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      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步。