我在matlab中有一个3 x n数组。我想创建一个新的4 xn数组,其中包含第1行和第2行的所有唯一组合,每个组合的第三列的总和以及这些唯一组合存在的次数(以便稍后获得平均值)。
有没有一种有效的方法可以做到这一点,而不使用两个嵌套的for循环?
编辑:所有三行都是数值(整数)。我用a,b,c,d只是为了演示目的。
例如:
Unprocessed matrix:
a b b d a a d d
a c d d d a d d
5 5 5 5 5 5 5 5
New matrix:
a b b d a
a c d d d
10 5 5 15 5
2 1 1 3 1
答案 0 :(得分:2)
经典the source工作:
A = [1 2 2 4 1 1 4 4
1 3 4 4 4 1 4 4
5 5 5 5 5 5 5 5]
A = A.' %'
[u,~,subs] = unique(A(:,[1,2]),'rows')
sums = accumarray(subs(:),A(:,3))
occs = accumarray(subs(:),A(:,3),[],@numel)
out = [u, (sums./occs), occs].'
out =
1 1 2 2 4
1 4 3 4 4
5 5 5 5 5
2 1 1 1 3
如果您坚持示例中的顺序,那么您需要'stable'
unique
和accumarray
。{/ p>