组如何按多列汇总?

时间:2013-02-20 14:47:57

标签: matlab

具有大小为n x 3的矩阵我想按组排序第3行值,由第1列和第2列定义。

给出一个具体的例子

A =[0.0050    0.0050    0.0050
    0.0050    0.0050    0.0150
    0.0050    0.0050    0.0250
    0.0050    0.0050    0.0350
    0.0050    0.0150    0.0050]

我想总结第三列,以便我得到一个矩阵

SumA = [0.05 0.05 0.8; 0.05 0.15 0.005];

我尝试通过调用accumarray(A(:,[1 2]),A(:,3)来创建组,但它返回错误: 第一个输入SUBS必须包含正整数下标。

然后我尝试首先创建

ind = A(:, [1,2])*1000;

然后

accumarray(ind, A(:,3))

但它返回了一个5 x 15的矩阵,这不是我想得到的结果。

有没有人知道如何对行进行求和,按所选列的组合分组(相当于SQL SELECT a,b,SUM(c)FROM A GROUP BY a,b)?

谢谢!

1 个答案:

答案 0 :(得分:3)

[~,~,ind]=unique(A(:,1:2),'rows')为您提供了对accumarray有用的下标/索引数组。第一个参数的下标需要引用第二个参数中的位置(即列向量A(:,3)。不确定为什么你期望一个2乘5的数据矩阵,而不是索引,在那里做任何事情。< / p>

ans(ind)会为您提供一个包含A行数的列向量。