4

2 つのセル配列を連結したいと考えています。サイズの異なる2つの行列があり、それらを連結する唯一の方法は、セル配列を使用することです。これが私のコードです

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.
4

2 に答える 2

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

これにより、同じセル配列が得られます。

于 2013-02-28T13:43:29.883 に答える
4

c{1}セルの内容、つまりあなたの場合はマトリックスを指します。[a b]囲まれたコンテンツ、つまり 2 つの行列 (行数が同じ場合) を連結します。

2 つの cell 配列を連結するには、そのように参照します。セル配列の単一セルを参照するには()、たとえばを使用できますc(1)。したがって、

[c(1) c(2)]

動作します (または [c(1);c(2)]) が、この例では、

c(1:2)

が望ましいです(c(1:2)'または行ではなく列の場合)。

于 2013-02-28T13:43:37.013 に答える