2013-02-20 50 views
2

具有一个大小为n x 3的矩阵,我想按第1列和第2列定义的组对第3行值进行求和。如何组合多列?

给定一个具体的例子

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×15矩阵这是不是我想要得到的结果。

有谁知道如何总结行,按选定列组合(相当于SQL SELECT a,b,SUM(c)FROM GROUP BY a,b)组合吗?

谢谢!

回答

3

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

ans(ind)将会给你一个列向量,其行数为A