Finding Indices of Duplicate Values

89 visualizaciones (últimos 30 días)
RDG
RDG el 19 de Nov. de 2013
Respondida: RST el 14 de Mayo de 2024
Suppose, I have a variable,
a{1}=[
2 2 1 3
5 2 1 1
5 2 1 4
5 2 1 2
1 1 2 1
2 2 2 1
1 1 3 4
1 1 3 3
4 1 3 5
1 1 4 3
1 1 4 4
1 1 4 1
2 2 4 1
2 2 4 2
4 1 4 2
4 1 4 6
2 2 5 2
2 2 5 6
4 1 5 1
4 1 5 2
4 1 5 6
4 1 5 5]
How can I find the indices of duplicate values for column 3:4?
I am using Matlab R2013a. Thank you in advance.

Respuesta aceptada

Simon
Simon el 19 de Nov. de 2013
Hi!
You may use "unique". The second output is the index of all unique values, e.g. in column 3. All other indices are duplicates.
  6 comentarios
Jeffrey Daniels
Jeffrey Daniels el 1 de Oct. de 2018
This is one solution but it is not complete or 100% accurate. The question asked for unique matches in columns 3 and 4. Also, this method only returns values that are repeated adjacent to each other. If you want to find all matches in all rows, I would refer you to this solution: https://www.mathworks.com/matlabcentral/answers/175086-finding-non-unique-values-in-an-array
Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco el 29 de Jun. de 2021
Thank you Guys!
So helpful your tips.
Best.

Iniciar sesión para comentar.

Más respuestas (2)

B Mohandes
B Mohandes el 10 de Nov. de 2016
by coincidence i found another way to do it, but thanks to those who answered already. the outputs of the command "unique" can be tricky to deal with, hence, here is a straight forward way.
>> find(hist(a,unique(a))>1)
the command (hist) counts the frequency (number of repetitions) of a certain value in a vector. if you use: hist(a), matlab will divide the whole range of values to 10 periods, and count the repetitions of values lying within these ranges. however, if you use: hist(a,b), then the repetitions are counted against the reference (b). so when you count the occurrences of each element in (a) against the unique elements of (a), and you find the results that are >2, then you're finding the elements that occurred more than once.
regards
  4 comentarios
Yavor Kamer
Yavor Kamer el 10 de Sept. de 2019
i think you can use 1:max(ib) in your second unique
Matt Fetterman
Matt Fetterman el 2 de Mzo. de 2020
I think a has to be sorted for this to work properly

Iniciar sesión para comentar.


RST
RST el 14 de Mayo de 2024
If I understand correctly, you want the row indices where the pair a{1)}(3,4) are duplicated.
a{1}=[
2 2 1 3
5 2 1 1
5 2 1 4
5 2 1 2
1 1 2 1
2 2 2 1 % me!
1 1 3 4
1 1 3 3
4 1 3 5
1 1 4 3
1 1 4 4
1 1 4 1
2 2 4 1 % and me!
2 2 4 2
4 1 4 2 % and me!
4 1 4 6
2 2 5 2
2 2 5 6
4 1 5 1
4 1 5 2 % and me!
4 1 5 6 % and me!
4 1 5 5]
a = 1x1 cell array
{22x4 double}
[~,ixu] = unique( a{1}(:,3:4), 'rows'); % gives indices of the first of the unique rows
ixd = setdiff( 1:size(a{1},1), ixu); % (duplicate rows) = (all rows) - (unique rows)
clear ixu
ixd
ixd = 1x5
6 13 15 20 21
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
% show rows that are duplicates in columns 3:4
a{1}(ixd, :)
ans = 5x4
2 2 2 1 2 2 4 1 4 1 4 2 4 1 5 2 4 1 5 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by