表和变量名-matlab

表和变量名-matlab,matlab,Matlab,假设我有以下MATLABcode: 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个项目,是否有一种复杂的方法来扩展此列表。在这段代码之后,我应该在表中包含每一个a(:,I),I=1,…,20,另外

假设我有以下
MATLAB
code:

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个项目,是否有一种复杂的方法来扩展此列表。在这段代码之后,我应该在
中包含每一个
a(:,I),I=1,…,20
,另外我还必须对
列表执行相同的操作。我想还有比这更方便的方法

您可以创建一个包含a中所有列的单元格

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);
见:


编辑:似乎与
array2table
相关的开销很大。它本质上是
mat2cell
的包装器,因此单独使用它并跳过所有的错误检查可能会有速度优势。但是还没有测试过。

@simmons你试过运行它吗?这里可能缺少一些东西。我添加了一个工作示例。你可以改变a的形状,它应该可以工作。你在每次循环迭代中调整单元格数组的大小,这在计算上是非常低效的。您知道在内存中预先分配数组的所有相关维度,并且应该这样做。当然,但是对于任何合理的列数来说,这都不重要。这似乎是一个非常好的解决方案(这就是为什么要进行upvote),但是
列表如何以自动方式更改?@thanasissdr抱歉,我错过了问题的这一部分。我已经更新了我的答案
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);