拼接单元格数组。

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

这将为您提供相同的单元数组。

谢谢!我正在尝试在另一组数据上做类似的事情。只是做了一个类似的小例子来看它是否有效。 - Mike Smith

4

c{1} 指的是单元格的内容,即您的情况下的矩阵。[a b] 连接所包含的内容,即两个矩阵(如果行数相同)。

要连接两个单元格数组,请将它们称为单元格数组。要引用单元格数组的单个单元格,可以使用 (),例如 c(1)。因此,

[c(1) c(2)]

可以使用works(或[c(1); c(2)]),但对于此示例

c(1:2)

最好使用c(1:2)'来代替行而不是列。


我认为这不起作用,因为数组的大小不同?请参考HebeleHododo的答案。 - Floris
@Floris,哪里出了问题?我在HebeleHododo的回答中没有看到任何提示,说明为什么OP尝试的方法不起作用,或者为什么我的建议不起作用。(顺便说一句:两个答案都在大约同一时间得到了赞同,所以我猜测OP尝试了两个建议,并发现它们都有帮助。) - arne.b
当两个数组大小不同时,就像OP的情况一样,您需要使用{}来连接它们,而不是[] - 这就是两个答案不同的地方,而您的方法将无法工作。 - Floris
@Floris 你用的是哪个版本的MATLAB?我很难想象这曾经不起作用--请参见上面的推理。或者你是指第二句中的假设情况吗?括号中的备注旨在解释为什么OP的方法不起作用:行数不同(列数无关紧要,因此从技术上讲,即使ab在一个维度上大小不同也可以)。 - arne.b
我猜我们对问题的理解不同。当 OP 说“具有不同值的矩阵”时,我认为展示如何处理这种情况是正确的方法。像你所做的那样连接可能在实际编写的代码中技术上不会生成错误,但显然 OP 希望得到一个回答,处理诸如 magic(3)magic(4) 等不同行和列的事情。可能不值得进一步阐述... - Floris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接