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.
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.
How about:
[~, ia, ic] = unique(A, 'rows')
setdiff(1:size(A,1), ia( sum(bsxfun(@eq,ic,(1:max(ic))))<=1 ))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With