我有一个包含多组行的表,由几列的唯一组合给出。我希望计算每组中的行数。最有效的方法是什么?我知道我可以使用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秒。
答案 0 :(得分:3)
对于您的示例(包含1000000行和3列的表),这似乎是快80倍:
[gT, ~, v] = unique(T, 'rows');
gT.GroupCount = accumarray(v, 1);