読者です 読者をやめる 読者になる 読者になる

Cucco’s Compute Hack

コンピュータ関係の記事を書いていきます。

行列の重複排除

MATLAB

uniqueを使って、複数の行列から、同じ行列を削除する。

2×4の行列をいくつか作っておく。a4とa5が重複。

>> a1=[1 2 3 4; 5 6 7 8]
a2=[2 3 4 5; 6 7 8 9];
a3=[3 4 5 6; 7 8 9 0];
a4=[1 2 3 4; 5 6 7 8];
a5=[2 3 4 5; 6 7 8 9];

a1 =

     1     2     3     4
     5     6     7     8

 reshapeで行ベクトルにして、つなげておく。

>> a1v=reshape(a1,1,[ ])
a2v=reshape(a2,1,[ ]);
a3v=reshape(a3,1,[ ]);
a4v=reshape(a4,1,[ ]);
a5v=reshape(a5,1,[ ]);

aa=[a1v;a2v;a3v;a4v;a5v]

a1v =

     1     5     2     6     3     7     4     8


aa =

     1     5     2     6     3     7     4     8
     2     6     3     7     4     8     5     9
     3     7     4     8     5     9     6     0
     1     5     2     6     3     7     4     8
     2     6     3     7     4     8     5     9

行単位でuniqueを実行して、reshapeで2×4の行列に戻す。

>> ua=unique(aa,'rows')

size(ua)

reshape(ua(1,:),2,4)
reshape(ua(2,:),2,4)
reshape(ua(3,:),2,4)

ua =

     1     5     2     6     3     7     4     8
     2     6     3     7     4     8     5     9
     3     7     4     8     5     9     6     0


ans =

     3     8


ans =

     1     2     3     4
     5     6     7     8


ans =

     2     3     4     5
     6     7     8     9


ans =

     3     4     5     6
     7     8     9     0