Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I find indices of each row of a matrix which has a duplicate in matlab?

I want to find the indices all the rows of a matrix which have duplicates. For example

A = [1 2 3 4
     1 2 3 4
     2 3 4 5
     1 2 3 4
     6 5 4 3]

The vector to be returned would be [1,2,4]

A lot of similar questions suggest using the unique function, which I've tried but the closest I can get to what I want is:

[C, ia, ic] = unique(A, 'rows')

ia = [1 3 5]
m = 5;
setdiff(1:m,ia) = [2,4]

But using unique I can only extract the 2nd,3rd,4th...etc instance of a row, and I need to also obtain the first. Is there any way I can do this?

NB: It must be a method which doesn't involve looping through the rows, as I'm dealing with large sparse matrices.

like image 507
Matt Harris Avatar asked Jan 16 '14 11:01

Matt Harris


People also ask

How do you find the index of a value in Matlab?

In MATLAB the array indexing starts from 1. To find the index of the element in the array, you can use the find() function. Using the find() function you can find the indices and the element from the array. The find() function returns a vector containing the data.


1 Answers

How about:

[~, ia, ic] = unique(A, 'rows')

setdiff(1:size(A,1), ia( sum(bsxfun(@eq,ic,(1:max(ic))))<=1 ))
like image 151
Dan Avatar answered Oct 01 '22 20:10

Dan