我想在没有循环的情况下合并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
我试着用循环来做,但它真的太慢了。是否有一个函数可以在没有循环的情况下完成它?
答案 0 :(得分:4)
您可以结合使用unique
和accumarray
:
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