有一个大小为 n x 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]
我想对第三列求和,这样我就可以得到一个矩阵
总和 = [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)?
谢谢!
最佳答案
[~,~,ind]=unique(A(:,1:2),'rows')
为您提供一个可用于 accumarray
的下标/索引数组。第一个参数的下标需要引用第二个参数中的位置(即列向量 A(:,3)
。不知道为什么你期望一个 2×5 的数据矩阵,而不是索引,在那里做任何事情。
ans(ind)
将为您提供一个列向量,其行数再次与 A
相同。
关于matlab - 如何按多列对总和进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14982693/