a = [1 1 1 1 2 2 2 2 3 3 3 3; 1 2 3 4 5 6 7 8 9 10 11 12]';
第2列中与第1列中每个数字的第一个和最后一个匹配项相对应的最快方法是什么?
所需的输出:
1 5
2 13
3 21
编辑:如果第1列中的数字的排序方式不同,结果应该相同。
a = [2 2 2 2 1 1 1 1 3 3 3 3; 1 2 3 4 5 6 7 8 9 10 11 12]';
2 5
1 13
3 21
答案 0 :(得分:3)
您可以按如下方式使用accumarray
。不确定它有多快,特别是因为它使用自定义匿名函数:
[u, ~, v] = unique(a(:,1), 'stable');
s = accumarray(v, a(:,2), [], @(x) x(1)+x(end));
result = [u s];
如果a
第一列中的值始终位于连续组中,则也可以使用以下方法:
ind_diff = find(diff(a(:,1))~=0);
ind_first = [1; ind_diff+1];
ind_last = [ind_diff; size(a,1)];
s = a(ind_first,2) + a(ind_last,2);
result = [unique(a(:,1), 'stable') s];