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));