2013-02-28 52 views
4

我希望将两个单元阵列连接在一起。我有两个不同大小的矩阵,根据我的理解,将它们连接在一起的唯一可能方式是使用单元阵列。这里是我的代码连接单元阵列

M = magic(3); 
B = {magic(3) 'sip' magic(4) magic(3) } 

C = {B; ... 
     B; ... 
     B; ... 
     B} 


c1 = C{1}{1,1}; 
c2 = C{1}{1,3}; 
c{1} = c1; % after extracting matrix from cell array put it it 
c{2} = c2; % into another cell array to attempt to concatenate 
conca = [c{1};c{2}]; %returns error. 

,我发现了以下错误:

??? Error using ==> vertcat 
CAT arguments dimensions are not 
consistent. 

Error in ==> importdata at 26 
conca = [c{1};c{2}]; %returns error. 

回答

5

我想这是你想要的输出:

conca = 

    [3x3 double] 
    [4x4 double] 

其中conca{1}是:

8  1  6 
3  5  7 
4  9  2 

conca{2}是:

16  2  3 13 
5 11 10  8 
9  7  6 12 
4 14 15  1 

你其实非常接近。所有你需要的是将方括号改为大括号。就像这样:

conca = {c{1};c{2}}; 

其实我不知道为什么你已经使用C而不是仅仅做

conca = {B{1};B{3}} 

这会给你同样的单元阵列。

+0

谢谢!我试图在另一组数据上做类似的事情。只是做了一个小例子,它看起来很类似。 – 2013-02-28 14:04:25

4

c{1}是指单元格的内容,即您的情况下的矩阵。 连接封闭内容,即两个矩阵(如果行数相同)。

要连接两个单元格阵列,请参照它们。为了引用单元阵列的单个单元,可以使用例如(),例如, c(1)。因此,

[c(1) c(2)] 

作品(或[C(1); C(2)]),但对于这个例子,

c(1:2) 

是(为一个柱,而不是一列或c(1:2)')优选。

+0

我不认为这是可行的,因为数组是不同的大小?见HebeleHododo的答案。 – Floris 2013-02-28 15:26:45

+0

@弗洛伊什不起作用?我在HebeleHododo的回答中没有看到提示,为什么OP所尝试的操作不起作用,或者为什么我建议不应该这样做。 (顺便说一句:这两个答案都是在同一时间上调的,所以我猜测OP会尝试这两个建议,并发现它们都有帮助。) – 2013-03-01 08:35:39

+0

当两个数组的大小不一样时,就像OP中的情况一样,将它们与“{} '而不是'[]' - 这就是两个答案不同的地方,而你的方法是行不通的。 – Floris 2013-03-01 10:07:30