在Matlab中只在一维中连接单元格数组

时间:2015-03-23 14:38:27

标签: arrays matlab concatenation cell-array

我在Matlab中有一个表格的二维单元格B,即:

A = table(normrnd(0,1,5,1),normrnd(0,1,5,1),normrnd(0,1,5,1));

B = {A,A,A,A;A,A,A,A}

B = 

[5x3 table]    [5x3 table]    [5x3 table]    [5x3 table]
[5x3 table]    [5x3 table]    [5x3 table]    [5x3 table]

我想在单元格数组的第一维(2行)中连接表格,但要将单元格结构保留在另一个维度中。因此,我想有以下内容:

{cat(1,B{:,1}),cat(1,B{:,2}),cat(1,B{:,3}),cat(1,B{:,3})}

ans = 

[10x3 table]    [10x3 table]    [10x3 table]    [10x3 table]

然而,由于我的实际单元阵列有超过2行和4列,这不是一个合适的解决方案。我尝试过使用catvertcat,但我无法让它们在第二维中不连接。使用'cat',我得到:

cat(1,B{:})

ans = 

[40x3 table]

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个:

result = cellfun(@(a,b) cat(1,a,b),B(1,:),B(2,:),'UniformOutput',false);

输出:

result = 

    [10x3 table]    [10x3 table]    [10x3 table]    [10x3 table]

(我们需要将UniformOuput设置为false,因为输出单元格的内容不是标量。)


我案例中其中一个单元格的内容:

result{1}

ans = 

      Var1       Var2        Var3  
    ________    _______    ________

    -0.20497     0.6715      1.0347
    -0.12414    -1.2075     0.72689
      1.4897    0.71724    -0.30344
       1.409     1.6302     0.29387
      1.4172    0.48889    -0.78728
    -0.20497     0.6715      1.0347
    -0.12414    -1.2075     0.72689
      1.4897    0.71724    -0.30344
       1.409     1.6302     0.29387
      1.4172    0.48889    -0.78728