2016-07-24 94 views
0

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

例如:
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

你可以发表你的矩阵的一些例子吗? –

+0

这会动态地改变你的三维矩阵B的第一维。并将迄今为止未定义的值填入零。不知道你是否真的想要。 –

+2

一个标准(非单元)数组'B(x,1:2,n)'不能有不同''''每个'n' –

回答

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))