matlab如何删除矩阵多行,matlab矩阵中如何去掉重复的行?

近来用matlab编程遇到了这样两个问题,如有以下矩阵:

IDX = [1,2,3;

2,3,1;

1,2,3;

2,3,1;

1,1,1;

1,1,1];

问题1)怎样去掉其中的重复行呢?

在网上找了半天,大家都提供的是自己写的循环。我在想,这样简单的问题matlab肯定提供了基础函数调用。

最后发现是这个函数:unique

它的调用说明如下(来自matlab的help,这里我就不想翻译了)

0818b9ca8b590ca3270a3433284dd417.png

举例代码如下:

IDX = [1,2,3;

2,3,1;

1,2,3;

2,3,1;

1,1,1;

1,1,1];

classNo = unique(IDX,'rows');

得到结果如下:

classNo =

1     1     1

1     2     3

2     3     1

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

问题2)在matlab中怎样找到相同的行?并找到其位置。

问题1的结果矩阵:

classNo =

1     1     1

1     2     3

2     3     1

新来两个向量(与classNo列相同)如下:

a = [1,2,3];

b = [1,5,4];

我们要判断a,b是不是在classNo中出现过并找到相应位置

原来用的函数是:ismember

它的调用说明如下(来自matlab的help,这里我就不想翻译了)

0818b9ca8b590ca3270a3433284dd417.png

上面的例子,对应代码如下:

IDX = [1,2,3;

2,3,1;

1,2,3;

2,3,1;

1,1,1;

1,1,1];

classNo = unique(IDX,'rows');

a = [1,2,3];

b = [1,5,4];

[tfa,loca] = ismember(a,classNo,'rows')

[tfb,locb] = ismember(b,classNo,'rows')结果如下:

tfa =

1

loca =

2

tfb =

0

locb =

0

说明:a在classNo中能找到,并对应的位置为2

b找不到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值