matlab中去掉矩陣重複行並且不改變原順序
阿新 • • 發佈:2019-02-19
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));