How to find duplicate values in 2d matrix?

3 Ansichten (letzte 30 Tage)
Javier
Javier am 26 Jul. 2019
Bearbeitet: Rik am 26 Jul. 2019
Hello,
I have the following matrix
M =[ 1540 1685 6.90000000000000 24.2000000000000 14.6000000000000;
1540 1700 9.90000000000000 15.5000000000000 17.9000000000000;
1540 1701 9.90000000000000 12.4000000000000 17.9000000000000;
1540 1685 6.90000000000000 23.5000000000000 14.600000000000
1540 1700 9.90000000000000 15 17.9000000000000;
1540 1701 9.90000000000000 13.3000000000000 17.9000000000000;
1540 1680 6.90000000000000 26.2000000000000 14.4000000000000;
1540 1689 6.90000000000000 26.1000000000000 14.6000000000000;
1540 1680 6.90000000000000 24 14.6000000000000;
1540 1680 6.90000000000000 24 14.5000000000000;
1540 1688 7 23.5000000000000 14.6000000000000;
]
And I would like to identify the duplicates of that matrix based on the first two colums and extract them to furher operations. Thus, I would like to have a way to get a sub-matrices of the form
M11 = [ 1540 1700 9.90000000000000 15.5000000000000 17.9000000000000;
1540 1700 9.90000000000000 15 17.9000000000000;
]
M22 =[ 1540 1680 6.90000000000000 26.2000000000000 14.4000000000000;
1540 1680 6.90000000000000 24 14.5000000000000;
]
How can I achieve this? Could I use findgroups for this purpose?
Thanks in advance
  2 Kommentare
KSSV
KSSV am 26 Jul. 2019
Read about unique
Jan
Jan am 26 Jul. 2019
This is a 2D matrix, not 4D.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Rik
Rik am 26 Jul. 2019
Bearbeitet: Rik am 26 Jul. 2019
You can indeed use findgroups. You should supply the first two columns as separate inputs.
G=findgroups(M(:,1),M(:,2));
Then I would suggest looping through the group IDs and fill a cell array. Don't use numbered variables, because they are hard to use in further analysis.
  2 Kommentare
Javier
Javier am 26 Jul. 2019
Thanks Rik,
To be sure that I understand the output of findgroups, G variable contains group identifiers right? Meaning that for instance all elements with same M(:,1) and M(:,2) share same identifier, is that correct?
Then I could do something like
for k=1:max(G)
idx = G == k;
subM{k} = [M(idx,1) M(idx,2) M(idx,3) M(idx,4) M(idx,5)]
end
and I could check for the differences?
Rik
Rik am 26 Jul. 2019
Bearbeitet: Rik am 26 Jul. 2019
That should work. You can also use ismember to generate the idx vector (in which case that would become a logical vector). You can also more generally use M(idx,:) instead of specifying each column separately.
Also, starting off with subM=cell(1,max(G)); is probably a good idea.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by