假设我有以下MATLAB
代码:
clear; clc
Items = {'counter','item1', 'item2', 'item3', 'item4'};
a = rand(8,4);
j = (1:8)';
t = table(j,a(:,1), a(:,2), a(:,3), a(:,4),'VariableNames',Items)
我想知道是否有一种复杂的方法来扩展此列表,如果我有20项。遵循此代码,我应该在每个table
内加a(:,i), i = 1,...,20
,并且我必须对Items
列表执行相同的操作。我想有一个比这更方便的方法。
答案 0 :(得分:1)
您可以创建一个包含所有列的单元格。
for i=1:size(a,2)
acell{end+1}=a(:,i);
end
然后致电
table(j,acell{:},'VariableNames',Items)
以下是一个例子:
Items = {'counter'};
a = rand(8,6);
j = (1:8)'
acell = [];
for i=1:size(a,2)
acell{end+1}=a(:,i);
Items{end+1}=['item',num2str(i)];
end
t = table(j,acell{:},'VariableNames',Items);
答案 1 :(得分:1)
请参阅array2table
:
a = rand(8,4);
[l, w] = size(a);
j = 1:l;
Items = cell(1, w + 1);
Items{1} = 'counter';
for ii = 2:length(Items)
Items{ii} = sprintf('item%u', ii - 1);
end
t = array2table([j', a], 'VariableNames', Items);
编辑:似乎有很多与array2table
相关的开销。它本质上是mat2cell
的包装器,因此单独使用它并跳过所有错误检查可能会有速度优势。但是没有测试过。