表和变量名称 - matlab

时间:2015-05-28 18:21:54

标签: matlab

假设我有以下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列表执行相同的操作。我想有一个比这更方便的方法。

2 个答案:

答案 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的包装器,因此单独使用它并跳过所有错误检查可能会有速度优势。但是没有测试过。