将单元格转换为标准矩阵

时间:2016-07-24 19:05:13

标签: matlab octave

如何将单元格数组转换为标准矩阵?

例如:
A{1}包含11行* 2列矩阵
A{2}一行x行* 2列(它总是两列矩阵)
...
A{n}一个x行* 2列矩阵。

每次单元格的索引x更改时,行数n会有所不同。
换句话说,每个单元格内容总是2列宽,但包含不同数量的行。

我想将它们存储在标准数组B(x,1:2,n)中,其中包含2列,x根据n的变化而变化。

例如,如果A{1}为11x2,则这些值存储在B中,如下所示:B(1:11,1:2,1)
如果A{n}是x * 2,则B会将这些值存储为B(1:x,1:2,n)

感谢。

1 个答案:

答案 0 :(得分:1)

生成测试数据:

A{1} = ones( 11, 2 )
A{2} = 2 * ones( 22, 2 )
A{3} = 3 * ones( 33, 2 )

A = 

    [11x2 double]    [22x2 double]    [33x2 double]

>> whos A
  Name      Size            Bytes  Class    Attributes

  A         1x3              1392  cell   

手动方法(当您知道尺寸时):

B( 1:11, 1:2, 1 ) = A{1}
B( 1:22, 1:2, 2 ) = A{2}
B( 1:33, 1:2, 3 ) = A{3}

循环方法:

for k = 1:numel( A )
    B( 1:size( A{k},1 ), 1:2, k ) = A{k};
end
>> whos B
  Name       Size             Bytes  Class     Attributes

  B         33x2x3             1584  double 

如您所见,矩阵的最大第一维将定义三维矩阵的第一维的大小,即:

>> B(:, :, 2)
=
 2     2
 2     2
 2     2
 2     2
 2     2
 2     2
 ...
 2     2
 2     2
 0     0
 ...
 0     0

编辑:您也可以预先分配B:

B = zeros( max( cellfun('size', A, 1) ), max( cellfun('size', A, 2) ), numel( A ) )