我有一个大小 n-by-3 的矩阵。对于此矩阵的某些行,前两列是相同的。我只需保留这些前两元素组合的一个副本,其中第三列将具有来自具有相同的前两列的行的3 rd 列的总和。
以下是我想要做的一个例子:
M = [...
1 2 1
1 2 3
1 2 2
1 2 4
2 3 1
2 3 4
2 3 0];
我需要的最终矩阵是
R = [...
1 2 1+3+2+4
2 3 1+4+0];
如何做到这一点?我不知道如何使用unique
命令。
答案 0 :(得分:3)
您可以将unique
与accumarray
结合使用。让我们调用最初的n x 3数组A
:
[C, ~, ic] = unique(A(:,1:2), 'rows');
B = [C, accumarray(ic, A(:,3))];
说明:
unique
不仅输出数组的唯一元素(在我们的例子中由于参数rows
而导致的行),而且还输出两个索引数组。第一个是A
中第一个独特元素的索引;因为我没有使用它,所以我放弃它。第二个可用于从输出数组重建原始数组:A(:, 1:2) = C(ic,:)
。
accumarray
是直方图计算的推广,它为第一个参数数组中每个唯一索引的第二个参数数组中的元素总和。在您的情况下,只对原始数组的第3列进行求和。
这就是两个简单的命令!