如何扩展我的单元格而不会丢失信息

时间:2016-01-12 23:48:36

标签: matlab

我有一个包含4个向量的单元格,我想扩展它以便它可以容纳另一个向量。提前谢谢。

a = cell(4, 1);
a{1} = [1, 2, 3];
a{2} = [1, 4, 9];
a{3} = [1, 4, 9];
a{4} = [1; 5];

我想添加一个新的矢量[2,7],这样我就可以得到这个

a{1} = [2, 7];
a{2} = [1, 2, 3];
a{3} = [1, 4, 9];
a{4} = [1, 4, 9];
a{5} = [1; 5]; 

我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

a = cell(4, 1);
a{1} = [1, 2, 3];
a{2} = [1, 4, 9];
a{3} = [1, 4, 9];
a{4} = [1; 5];

a = [[2, 7];a]

产量:

a = 

    [1x2 double]
    [1x3 double]
    [1x3 double]
    [1x3 double]
    [2x1 double]

答案 1 :(得分:1)

您尝试执行的操作的名称是concatenation。在MATLAB中,square brackets是一种隐式的连接方法。虽然您通常认为这些用于连接数字以形成向量或矩阵:

x = [1, 2, 3, 4]   % 1 x 4

您还可以使用它们来连接其他数据类型(包括单元格数组)

y = [{1,2}, 5, {4, 5}];  % 1 x 3 Cell Array

跟踪串联的维度也很重要。使用方括号,您可以使用逗号或跨行(第一维使用分号)跨列(第二维)连接。

size([1,2,3])

1 x 3

size([1;2;3])

3 x 1

虽然方括号是一种快速简便的解决方案,但我更喜欢更明确一些。为此,MATLAB具有以下功能:cathorzcatvertcat。我个人更喜欢cat,因为您可以在任意维度中指定连接。

x = cat(2, 100, 200, 300);    % 1 x 3

    100   200   300

x = cat(1, 100, 200, 300);    % 3 x 1

    100
    200
    300

x = cat(3, 100, 200, 300)   % 1 x 1 x 3

    x(:,:,1) =

       100

    x(:,:,2) =

       200

    x(:,:,3) =

       300

回到原来的问题,你想在第一维(行)中连接,所以你可以简单地执行以下操作:

a = cell(4, 1);
a{1} = [1, 2, 3];
a{2} = [1, 4, 9];
a{3} = [1, 4, 9];
a{4} = [1; 5];

a = cat(1, [2, 7], a);

还要记住,这种使用concat或方括号的形式可以应用于MATLAB中的大多数数据类型,包括struct等。