行列の重複している行を削除する方法

49 views (last 30 days)
HIRO HAGI
HIRO HAGI on 26 Oct 2020
Commented: HIRO HAGI on 26 Oct 2020
同じ要素を持った行がいくつかある際、上の行1行だけを残して残りを削除したいと考えています。
削除したあとの行列の並びはそのままです。
unique関数を利用して試行錯誤しているのですがうまくいきません。
以下具体例を挙げます。
例えば以下のような行列を考えます。
A= [1, 0, 1, 1, 1 ; 0, 1, 1, 0, 0 ; 0, 0, 0, 1, 1 ; 1, 0, 1, 1, 1 ; 1, 1, 0, 1, 1 ; 0, 0, 0, 1, 1]
このとき1行目と4行目、3行目と6行目がそれぞれすべて同じ要素を持っています。
1行目と3行目を残して4行目と6行目を削除する方法はありますでしょうか。
1行目から2行目、3行目...と見ていった際に重複していたら削除する、というものになります。
例での最終的にほしい行列は
B= [1, 0, 1, 1, 1 ; 0, 1, 1, 0, 0 ; 0, 0, 0, 1, 1 ; 1, 1, 0, 1, 1 ; ]
になります。

Accepted Answer

Akira Agata
Akira Agata on 26 Oct 2020
unique 関数の順序フラグを 'stable' に指定することで実現可能かと思います。
A = [1, 0, 1, 1, 1 ; 0, 1, 1, 0, 0 ; 0, 0, 0, 1, 1 ; 1, 0, 1, 1, 1 ; 1, 1, 0, 1, 1 ; 0, 0, 0, 1, 1];
B = unique(A,'stable','rows');
  1 Comment
HIRO HAGI
HIRO HAGI on 26 Oct 2020
大変参考になりました。有難うございます。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!