How can I tell if a rectangular matrix has duplicate rows in MATLAB?

前端 未结 4 748
南笙
南笙 2020-12-20 12:48

I have an n-by-m rectangular matrix (n != m). What\'s the best way to find out if there are any duplicate rows in it in MATLAB? What\'s the best way to find the indices of t

相关标签:
4条回答
  • 2020-12-20 12:55

    Use unique() to find the distinct row values. If you end up with fewer rows, there are duplicates. It'll also give you indexes of one location of each of the distinct values. All the other row indexes are your duplicates.

    x = [
        1 1
        2 2
        3 3
        4 4
        2 2
        3 3
        3 3
        ];
    [u,I,J] = unique(x, 'rows', 'first')
    hasDuplicates = size(u,1) < size(x,1)
    ixDupRows = setdiff(1:size(x,1), I)
    dupRowValues = x(ixDupRows,:)
    
    0 讨论(0)
  • 2020-12-20 12:55

    Run through the rows of the matrix, and for each pair, test if

    row1 == row2

    0 讨论(0)
  • 2020-12-20 13:01

    Say your matrix is M:

    [S,idx1] = sortrows(M);
    idx2 = find(all(diff(S,1) == 0,2));
    out = unique(idx1([idx2;idx2+1]));
    

    out will contain the duplicate row indices if any.

    0 讨论(0)
  • 2020-12-20 13:18

    You can use the functions UNIQUE and SETDIFF to accomplish this:

    >> mat = [1 2 3; 4 5 6; 7 8 9; 7 8 9; 1 2 3];    %# Sample matrix
    >> [newmat,index] = unique(mat,'rows','first');  %# Finds indices of unique rows
    >> repeatedIndex = setdiff(1:size(mat,1),index)  %# Finds indices of repeats
    
    repeatedIndex =
    
         4     5
    
    0 讨论(0)
提交回复
热议问题