在matlab中总结行值

时间:2014-02-14 22:29:49

标签: arrays matlab

我在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

2 个答案:

答案 0 :(得分:1)

uniqueaccumarray的通常组合可以胜任:

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