1. 程式人生 > >matlab中去掉矩陣重複行並且不改變原順序

matlab中去掉矩陣重複行並且不改變原順序

1、使用unique去掉矩陣中的重複行。

>> e=[2,2,2;3,3,3;1,1,1;1,1,1;0,0,0]

e =

     2     2     2
     3     3     3
     1     1     1
     1     1     1
     0     0     0
>> f=unique(e)
>> f =

     0     0     0
     1     1     1
     2     2     2
     3     3     3

2、在上一步中f即是去掉e中重複行後的結果,但是matlab的unique函式對它進行了重新排序,如果我們想要去掉重複的行同時又不改變其原本的順序的話,可以進行如下操作:

>> %a.取出unique重排後的結果f和其原本在e中的行號:
>> [f,location]=unique(e,'rows','first')
f =

     0     0     0
     1     1     1
     2     2     2
     3     3     3


location =

     5
     3
     1
     2
>>%b.將location和f拼成一個新的陣列,並按第一列的大小排序:
>> res=sortrows([location,f])
res =

     1
2 2 2 2 3 3 3 3 1 1 1 5 0 0 0 >> %c.取上一步中得到的矩陣res中的除第一列以外的所有列: >> new_e=res(:,2:4) new_e = 2 2 2 3 3 3 1 1 1 0 0 0 >> %new_e即是去掉了e中的重複行,並且沒有對其進行重新排列的陣列。

3、

function new_a
= unique_arrys(a)
[b,location] = unique(a,'rows','first'); res = sortrows([location,b]); new_a=res(:,2:size(res,2));