Matlab:向单元格中添加行

Matlab:向单元格中添加行,matlab,cell-array,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

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

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.
我想在一个循环中这样做,这样在每次交互中,另一行被添加到单元格中

我该怎么做?谢谢。

代码

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'

最好的办法是:

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

cell = row1;
cell = {cell{:}, row2{:}};
cell = {cell{:}, row3{:}}
Divakar的答案不会生成单元格作为输出。

您不能使用

c = row1;
c = [cell; row2]
因为两行中的列数不匹配。在单元格数组中,所有行的列数必须相同。出于同样的原因,您也不能使用此选项(这将是等效的):

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

c = {row1};
c = [c; {row2}]; %// or c(end+1) = {row2};
现在
c
是一个由单元阵列组成的单元阵列:

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

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

这些是行数组,您希望输出是什么?行或列数组?顺便说一句。这是在倍频程3.6.4音阶中测试的。假设我现在想在第1行或第2行中查找字符串的数量-其语法是什么?@Karnivaurus
numel(c{1})
numel(c{2})
c = 
    {1x3 cell}
    {1x4 cell}