八度 - 按列合并矩阵而不循环

时间:2016-12-12 04:49:21

标签: matlab matrix merge octave

我想在没有循环的情况下合并Octave上的表。这是我想要做的一个例子:

column1 column2 column3 
1        1       1
1        2       2
1        1       2
1        1       3
2        1       3
2        1       1

喜欢这个:

column1 column2 column3 
1        1       6
1        2       2
2        1       4

我试着用循环来做,但它真的太慢了​​。是否有一个函数可以在没有循环的情况下完成它?

1 个答案:

答案 0 :(得分:4)

您可以结合使用uniqueaccumarray

A = [1        1       1
     1        2       2
     1        1       2
     1        1       3
     2        1       3
     2        1       1];


[U,~,ind] = unique(A(:,1:2),'rows'); %get the unique rows based on the column 1 and 2.
AC        = accumarray(ind,A(:,3)); %sum the value of column 3 based on column 1 and 2
M         = [U,AC] % creation of the final matrix.

<强>结果:

M =

   1   1   6
   1   2   2
   2   1   4