我收到此错误:
无法连接表变量'epoch',因为它是一个单元格 在一个表中,一个非单元格在另一个表中。
重现该错误:
A.epoch = [1,2,3]';
A.value = [10,20,30]';
带有标题的初始化空表:
Aclean = cell2table(cell(1,2), 'VariableNames', {'epoch', 'value'});
垂直连接2个表:
Aclean = vertcat(Aclean, struct2table(A));
在Matlab中用for循环连接表的最佳方法是什么?
答案 0 :(得分:2)
如果我理解正确,您想在循环之前初始化Aclean
,然后在每次循环迭代中将数据连接到它。如果是这样,您可以简单地将Aclean
初始化为空数组:
Aclean = [];
A.epoch = [1,2,3].';
A.value = [10,20,30].';
Aclean = vertcat(Aclean, struct2table(A));
但是,如果您事先知道要向表中添加多少行,最好预先分配整个表:
% N = number of rows
A = array2table(zeros(N,2), 'VariableNames', {'epoch', 'value'});
A.epoch(1:3) = [1,2,3];
A.value(1:3) = [10,20,30];
从底部删除未使用的行比在每次迭代中追加都便宜。
另一种替代方法是在循环后使用struct
并将其转换为table
。 struct是内置类型,而表则实现为自定义类。因此,该结构将更有效地进行更新。