合并两个三列矩阵:cols 1& 2中​​的uniques,col 3中的最大值

时间:2018-05-23 06:26:31

标签: matlab matrix merge unique set-union

我有两个矩阵:

a = [ 1 10 20; 2 11 22; 3 12 34; 4 13 12];
b = [ 3 12 1;  4 13 25; 5 14 60; 6 15 9 ];

我想将它们合并到一个矩阵中,其中第3列中最大的行用于第1列和第2列相同的位置,即生成的矩阵应如下所示:

 c = [ 1 10 20; 2 11 22; 3 12 34; 4 13 25; 5 14 60; 6 15 9];

如何在MATLAB中轻松完成此任何建议将不胜感激。我在试图使用intersect的墙上撞了我的头,但无济于事。

3 个答案:

答案 0 :(得分:0)

合并数组时,应确保它们最终排序(按col1然后col2然后col3)。幸运的是,union函数就是这样做的。

在您的示例中,第1列和第2列中的值始终是唯一的,我们只能观察第1列中的值以选择正确的行。当diff返回非零值(这意味着这是组的底行)时会发生这种情况:

a = [ 1 10 20; 2 11 22; 3 12 34; 4 13 12];
b = [ 3 12 1;  4 13 25; 5 14 60; 6 15 9];
c = [ 1 10 20; 2 11 22; 3 12 34; 4 13 25; 5 14 60; 6 15 9 ];

u = union(a,b,'rows');               % this merges and sorts the arrays
r = u(logical([diff(u(:,1)); 1]),:); % since the array is sorted, the last entry will have 
                                     % the maximum value in column 3
assert(isequal(r,c));

答案 1 :(得分:0)

您还可以使用UPDATE `squad` SET `age` = TIMESTAMPDIFF(YEAR, `date_of_birth`, CURDATE()) unique之间的混合。

  • 使用accumarray根据2个第一列创建索引
  • 使用unique根据索引在第三列中查找最大值。

代码:

accumarray

答案 2 :(得分:-1)

了解唯一

a = [ 1 10 20;2 11 22; 3 12 34; 4 13 12];
b = [3 12 1; 4 13 25; 5 14 60; 6 15 9];

A = [a;b] ;
[c,ia,ib] = unique(A(:,1)) ;

C = A(ia,:)