0

私は2つの行列を持っています:

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 ];

列 1 と 2 が同一である列 3 に最大値を持つ行が使用される単一のマトリックスにそれらをマージしたい、つまり、結果のマトリックスは次のようになります。

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

MATLAB でこれを簡単に行う方法を提案していただければ幸いです。使用しようとして頭を壁にぶつけたintersectが、役に立たなかった。

4

3 に答える 3

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));
于 2018-05-23T07:40:58.027 に答える
-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,:)
于 2018-05-23T06:37:06.137 に答える