我在matlab中有这种类型的数据
1 1 10
1 2 10
1 2 3
2 1 1
2 1 25
2 3 4
从上面的数据集我想要这样的东西
1 1 10
1 2 13
2 1 26
2 3 4
基本上总结了数量。我怎样才能在matlab中有效地做到这一点?
我的实际数据
1653082 94751 1
1653082 133609 1
1653082 15712 1
1653082 15712 1
1653082 15712 1
1653082 87905 22
答案 0 :(得分:1)
unique
和accumarray
的通常组合可以胜任:
data = [1653082 94751 1
1653082 133609 1
1653082 15712 1
1653082 15712 1
1653082 15712 1
1653082 87905 22];
[ii, ~, kk] = unique(data(:,1:2),'rows');
vv = accumarray(kk, data(:,3));
result = [ ii vv ];
此示例中的结果是:
result =
1653082 15712 3
1653082 87905 22
1653082 94751 1
1653082 133609 1
答案 1 :(得分:1)
sparse output option of accumarray
解决了这些内存问题,并且不再需要unique
。使用问题底部的实际数据:
>> R = accumarray(data(:,1:2),data(:,3),[],@sum,0,true)
R =
(1653082,15712) 3
(1653082,87905) 22
(1653082,94751) 1
(1653082,133609) 1
>> [ii,jj] = find(R);
>> M = [ii jj nonzeros(R)]
M =
1653082 15712 3
1653082 87905 22
1653082 94751 1
1653082 133609 1