我想创建一个单元格数组,其中每一行都是一个字符串数组。行具有不同的长度。假设我将这些行存储为单元格本身,例如:
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.
我想在循环中执行此操作,以便在每次交互时,将另一行添加到单元格中。
我该怎么做?感谢。
答案 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'