2013-02-28 51 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