Matlab:向单元格添加行

时间:2014-03-17 19:32:06

标签: matlab cell-array

我想创建一个单元格数组,其中每一行都是一个字符串数组。行具有不同的长度。假设我将这些行存储为单元格本身,例如:

row1 = {'foo1', 'foo2', 'foo3'}
row2 = {'foo1', 'foo2', 'foo3', 'foo4'}
row3 = {'foo1', 'foo2'}

如何将这些连接到一个单元格?像这样:

cell = row1
cell = [cell; row2]
cell = [cell; row3]

但这给了我一个错误:

Error using vertcat. Dimensions of matrices being concatenated are not consistent.

我想在循环中执行此操作,以便在每次交互时,将另一行添加到单元格中。

我该怎么做?感谢。

3 个答案:

答案 0 :(得分:3)

你不能使用

c = row1;
c = [cell; row2]

因为两行中的列数不匹配。在单元数组中,所有行的列数必须相同。出于同样的原因,你也不能使用它(它是等价的):

c = row1;
c(end+1,:) = row2

如果您需要不同数量的“每行中的列”(或“锯齿状数组”),则需要两个级别:对行使用(第一级)单元格数组,并在每行存储列的(第二级)单元格数组。例如:

c = {row1};
c = [c; {row2}]; %// or c(end+1) = {row2};

现在c是一个单元格数组的单元格数组:

c = 
    {1x3 cell}
    {1x4 cell}

你可以像这样使用“链式”索引:例如c{2}{4}给出字符串'foo4'

答案 1 :(得分:1)

最好的方法是这样:

row1 = {'foo1', 'foo2', 'foo3'};
row2 = {'foo1', 'foo2', 'foo3', 'foo4'};
row3 = {'foo1', 'foo2'};

cell = row1;
cell = {cell{:}, row2{:}};
cell = {cell{:}, row3{:}}

Divakar的答案不会产生一个细胞作为输出。

答案 2 :(得分:0)

<强>代码

row=[];
for k=1:3

    %%// Use this if you want MATLAB to go through row1, row2, row3, etc. and concatenate
    evalc(strcat('cell1 = row',num2str(k))); 

    %cell1 = row1; %%// Use this if you want to manually insert rows as row1, row2, row3, etc.
    row=[row ; cell1(:)];

end
row = row'; %%// Final output is a row array

<强>输出

row = 

    'foo1'    'foo2'    'foo3'    'foo1'    'foo2'    'foo3'    'foo4'    'foo1'    'foo2'