【发布时间】:2015-02-17 09:54:24
【问题描述】:
我有一个非常大的 Matlab 表,大约有 1100 万行,我想重新排列它,以便为其中一个变量的每个实例提供一个元胞数组。以下较小的数据集将说明我的问题:
Data = table(repmat(randperm(50).',200,1),rand(10000,1),'VariableNames',{'ID','VAR'});
我可以通过以下命令执行任务,但应用到我的真实表时速度很慢:
UniID = unique(Data.ID);
CellData = arrayfun(@(x)Data(Data.ID==x,:),UniID,'UniformOutput',false);
我可以做些什么来优化执行时间?
【问题讨论】:
-
也许将
Data.ID放入一个单独的变量中? -
好的,谢谢,我试试看!
-
也可以尝试使用 for 循环而不是
arrayfun,开销可能会更少... -
摆脱
table可能是加快这一进程的最佳方式。 -
将
Data.ID放入一个单独的变量中,做了一点,但不是很多。我也可以试试 for 循环。我的真实表格有很多变量,其中一些不是数字,所以我不知道如何避免表格。
标签: matlab