基于两行从矩阵中提取元素并获得它们的平均值

时间:2015-09-07 09:30:34

标签: matlab matrix

我在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

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' uniqueaccumarray。{/ p>