如何将单元格数组转换为标准矩阵?
例如:
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)
。
感谢。
答案 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 ) )