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,这里我就不想翻译了)

matlab矩阵中如何去掉重复的行?_第1张图片

举例代码如下:

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,这里我就不想翻译了)

matlab矩阵中如何去掉重复的行?_第2张图片

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

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找不到。






你可能感兴趣的:(matlab矩阵中如何去掉重复的行?)