MATLAB:使用标题初始化并清空表,并将其连接到另一个表

时间:2018-08-10 02:02:44

标签: matlab

我收到此错误:

  

无法连接表变量'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循环连接表的最佳方法是什么?

1 个答案:

答案 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是内置类型,而表则实现为自定义类。因此,该结构将更有效地进行更新。