matlab 矩阵去掉重复行

问题背景

          在做多目标离散问题优化算法时,利用多个不同的进化算子产生了重复的解 ,所以有必要记录一下如何去掉重复的解,精简问题规模,尤其时迭代到后期,很多相同的解

解决办法

         

unique(A,'rows',setOrder)

          其中,setOrder 参数有两种取值,默认是’sorted’ 即去掉重复后排序输出(以第一个元素大小位依据),另一个是'stable' 代表去掉重复后按原来顺序输出

         

          常用 unique(A,'row','stable')

示例

>> a=[1 0 1;1 0 1; 1 1 1;2 5 1; 1 1 1;0 1 2 ;0 4 5 ;0 1 2]

a =

     1     0     1
     1     0     1
     1     1     1
     2     5     1
     1     1     1
     0     1     2
     0     4     5
     0     1     2

>> unique(a,'row','stable')

ans =

     1     0     1
     1     1     1
     2     5     1
     0     1     2
     0     4     5

>> unique(a,'row')

ans =

     0     1     2
     0     4     5
     1     0     1
     1     1     1
     2     5     1

>> 

补充

          如果你的这个矩阵还有与之关联的另一个矩阵,比如我的每一个解还对应着他的两个目标值,那你可能还需要返回行的下标,用于处理关联矩阵,如下

[uniqueA row]=unique(A,'row','stable')

          再者,你如果有从去重后的矩阵回复原矩阵的想法,那你可能还需要另一个返回值用于重构原矩阵,如下

[uniqueA row rebuilt]=unique(A,'row','stable')

          不过一般来讲,我们会保留原始举证,不太会把他丢掉,直接用去重覆盖的方式也比较少见。

你可能感兴趣的:(MATLAB)