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));
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值