计算表

时间:2015-09-01 04:12:23

标签: matlab

我有一个包含多组行的表,由几列的唯一组合给出。我希望计算每组中的行数。最有效的方法是什么?我知道我可以使用grpstats但是当有大量的群体时它似乎非常低效。

例如

rng(0,'twister');
N = 30; % control number of groups

c1 = randi([1 N],1000000,1);
c2 = randi([1 N],1000000,1);
c3 = randi([1 N],1000000,1);

T = array2table([c1 c2 c3]);

tic; gT = grpstats(T, {'Var1' 'Var2' 'Var3'}, 'numel'); toc;

使用grpstats似乎真正夸大了时间或更差的时间。当N = 3时,我的机器需要0.73秒。 N = 10时,需要2.6秒。当N = 30时,需要72秒。

1 个答案:

答案 0 :(得分:3)

对于您的示例(包含1000000行和3列的表),这似乎是快80倍

[gT, ~, v] = unique(T, 'rows');
gT.GroupCount = accumarray(v, 1);