質問: 行列の重複している行を削除する方法 同じ要素を持った行がいくつかある際、上の行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 ; ] になります。
回答: 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');