Info

This question is closed. Reopen it to edit or answer.

How can I identify the position of the repeated rows within a matrix?

1 view (last 30 days)
For instance, I have matrix
A=
[9 5 6 9 5 6 9 5 0;
9 6 0 9 6 0 9 6 5;
2 8 6 2 8 5 2 8 6;
6 4 0 6 4 0 6 4 0;
9 3 6 9 3 6 9 3 0;
10 7 5 10 7 6 10 7 6;
8 9 0 8 9 0 8 9 0;
6 8 0 6 8 5 6 8 0;
4 7 0 4 7 6 4 7 0;
2 7 6 2 7 0 2 7 5;
1 5 6 1 5 6 1 5 6;
6 5 0 6 5 0 6 5 0;
4 3 0 4 3 6 4 3 0;
7 2 5 7 2 0 7 2 5;
8 5 0 8 5 6 8 5 6;
2 6 5 2 6 0 2 6 5;
2 8 5 2 8 0 2 8 5;
7 10 5 7 10 6 7 10 6;
7 4 0 7 4 0 7 4 6;
7 4 6 7 4 6 7 4 6;
10 9 5 10 9 6 10 9 5;
10 8 0 10 8 6 10 8 5;
6 2 5 6 2 0 6 2 0;
7 8 5 7 8 5 7 8 6;
7 3 6 7 3 5 7 3 6;
5 2 6 5 2 0 5 2 0;
7 9 0 7 9 6 7 9 0;
7 2 6 7 2 5 7 2 0;
5 6 0 5 6 0 5 6 0;
6 9 0 6 9 0 6 9 0;
4 2 0 4 2 0 4 2 6;
8 2 0 8 2 6 8 2 6;
6 10 0 6 10 0 6 10 0;
7 1 6 7 1 0 7 1 0;
10 6 0 10 6 0 10 6 5;
8 3 6 8 3 5 8 3 5;
8 4 0 8 4 0 8 4 0;
6 7 0 6 7 5 6 7 5;
4 1 6 4 1 0 4 1 6;
6 5 0 6 5 0 6 5 0;
3 9 0 3 9 6 3 9 5;
8 2 5 8 2 5 8 2 5;
4 1 0 4 1 6 4 1 6;
3 4 6 3 4 0 3 4 6;
8 7 6 8 7 6 8 7 6;
9 1 0 9 1 6 9 1 5;
8 1 6 8 1 6 8 1 0;
2 9 6 2 9 6 2 9 6;
8 3 5 8 3 6 8 3 6;
1 7 0 1 7 5 1 7 0;
10 3 6 10 3 6 10 3 5;
8 10 5 8 10 0 8 10 5;
10 5 6 10 5 0 10 5 0;
10 2 6 10 2 6 10 2 5;
8 7 5 8 7 6 8 7 5;
9 8 5 9 8 6 9 8 5;
10 7 5 10 7 0 10 7 5;
9 5 6 9 5 6 9 5 0;
3 4 0 3 4 0 3 4 5;
1 2 6 1 2 6 1 2 5;
9 6 0 9 6 0 9 6 5;
6 9 0 6 9 0 6 9 0;
4 2 6 4 2 6 4 2 6;
7 3 0 7 3 5 7 3 5;
9 4 5 9 4 5 9 4 6;
2 9 0 2 9 6 2 9 0;
2 5 0 2 5 0 2 5 0;
4 9 0 4 9 5 4 9 6;
4 8 6 4 8 0 4 8 6;
8 9 6 8 9 5 8 9 0;
5 8 0 5 8 0 5 8 6;
10 9 5 10 9 5 10 9 5;
5 9 0 5 9 0 5 9 0;
9 7 5 9 7 6 9 7 0;
10 1 6 10 1 5 10 1 5;
1 3 5 1 3 5 1 3 0;
7 1 0 7 1 6 7 1 0;
7 9 0 7 9 6 7 9 6;
3 8 5 3 8 0 3 8 6;
1 6 5 1 6 0 1 6 5;
2 7 0 2 7 5 2 7 6;
3 2 5 3 2 5 3 2 5;
6 8 0 6 8 0 6 8 0;
3 6 0 3 6 5 3 6 5;
1 3 6 1 3 0 1 3 6;
7 5 0 7 5 0 7 5 0;
7 10 6 7 10 5 7 10 6;
5 7 0 5 7 0 5 7 0;
9 1 6 9 1 0 9 1 0;
6 7 5 6 7 0 6 7 0;
4 9 0 4 9 0 4 9 0;
10 2 6 10 2 5 10 2 6;
1 10 5 1 10 0 1 10 5;
6 3 5 6 3 5 6 3 0;
6 4 0 6 4 0 6 4 0;
2 4 0 2 4 0 2 4 0;
9 2 5 9 2 6 9 2 5;
5 7 6 5 7 0 5 7 6;
3 6 5 3 6 0 3 6 0;
5 10 0 5 10 6 5 10 0;
9 2 6 9 2 0 9 2 6;
3 7 0 3 7 0 3 7 6;
4 3 6 4 3 0 4 3 5;
8 6 0 8 6 0 8 6 0;
4 8 5 4 8 0 4 8 5;
9 8 6 9 8 0 9 8 5;
10 5 0 10 5 0 10 5 0;
3 8 5 3 8 6 3 8 0;
10 3 0 10 3 6 10 3 0;
9 7 0 9 7 6 9 7 0;
2 3 0 2 3 5 2 3 6;
2 6 0 2 6 5 2 6 0;
5 8 0 5 8 6 5 8 0;
5 4 0 5 4 0 5 4 6;
3 1 5 3 1 5 3 1 5;
5 6 0 5 6 0 5 6 0;
2 1 6 2 1 5 2 1 6;
9 10 5 9 10 5 9 10 5;
5 10 0 5 10 0 5 10 0;
3 5 0 3 5 0 3 5 6;
3 9 0 3 9 6 3 9 5;
4 7 6 4 7 0 4 7 6;
5 3 0 5 3 6 5 3 0;
10 1 5 10 1 6 10 1 0;
6 2 0 6 2 5 6 2 0;
2 5 0 2 5 6 2 5 0;
3 7 6 3 7 0 3 7 5;
7 8 5 7 8 6 7 8 0;
3 10 0 3 10 0 3 10 6;
4 5 0 4 5 0 4 5 0;
5 2 0 5 2 0 5 2 0;
1 4 0 1 4 6 1 4 5;
1 10 5 1 10 6 1 10 5;
5 9 0 5 9 0 5 9 0;
3 1 0 3 1 6 3 1 6;
1 9 5 1 9 0 1 9 0;
4 6 5 4 6 5 4 6 0;
7 6 5 7 6 5 7 6 0;
9 10 6 9 10 0 9 10 6;
10 6 0 10 6 5 10 6 0;
1 8 5 1 8 5 1 8 0;
2 4 6 2 4 6 2 4 6;
10 8 6 10 8 6 10 8 0;
3 5 6 3 5 0 3 5 6;
8 10 5 8 10 0 8 10 5;
8 5 0 8 5 0 8 5 6;
1 4 6 1 4 6 1 4 6;
7 5 0 7 5 0 7 5 0;
1 9 6 1 9 6 1 9 6;
5 1 0 5 1 0 5 1 0;
2 10 5 2 10 6 2 10 6;
2 3 5 2 3 5 2 3 5;
2 10 0 2 10 5 2 10 0;
5 1 6 5 1 0 5 1 6;
2 1 6 2 1 0 2 1 5;
4 5 0 4 5 0 4 5 6;
10 4 5 10 4 5 10 4 5;
4 6 0 4 6 0 4 6 0;
4 10 6 4 10 0 4 10 0;
1 2 5 1 2 5 1 2 5;
8 1 6 8 1 0 8 1 5;
6 10 0 6 10 0 6 10 5;
6 3 5 6 3 0 6 3 5;
1 7 0 1 7 0 1 7 0;
10 4 0 10 4 5 10 4 5;
7 6 0 7 6 0 7 6 5;
5 3 6 5 3 0 5 3 0;
9 4 5 9 4 5 9 4 6;
3 10 5 3 10 6 3 10 0;
4 10 0 4 10 6 4 10 0;
1 6 0 1 6 0 1 6 0;
1 5 0 1 5 6 1 5 0;
1 8 6 1 8 0 1 8 6;
8 4 5 8 4 0 8 4 0;
8 6 0 8 6 0 8 6 0;
3 2 0 3 2 6 3 2 5;
5 4 6 5 4 6 5 4 6;
9 3 5 9 3 0 9 3 6;
6 1 5 6 1 0 6 1 0;
6 1 5 6 1 0 6 1 5]
and what I need to identify is the position of the repeated rows from A(:,1:3),A(:,4:6), and A(:,7:9).As a solution, why I am looking for is for example repeated_rows1(A:,1:3)=[29;4],repeated_rows2(A:,4:6)=[159;46; 1;89], and repeated_rows3(A:,1:3)=[9;178]. Matrix A is not a fixed matrix it can grow. Right now I have an A(180,9) but the columns number can increase.Sincerely,I do not have any idea about how to do it so I would really appreciate your help. Thanks.

Answers (1)

Matt J
Matt J on 10 Sep 2014
Edited: Matt J on 10 Sep 2014
Consider the simpler matrix
A =
10.5000 10.5000
10.5000 10.5000
20.5000 20.5000
20.5000 20.5000
10.5000 10.5000
and now observe how the 3rd output of unique identifies the locations of the repetitions,
>> [u,i,j]=unique(A,'rows')
u =
10.5000 10.5000
20.5000 20.5000
i =
1
3
j =
1
1
2
2
1
  2 Comments
Jessy Ibarra
Jessy Ibarra on 11 Sep 2014
I try to use the same function before with this little matrix: a=[2,6,0,7,4,0;2,6,0,2,6,0;2,8,0,2,8,1;2,8,0,9,3,1;5,7,0,9,3,1] but I need to localize the repeated rows of my matrix by sections not as a whole. For instance,I want a(:,1:3)=[2 6 0;2 6 0; 2 8 0; 2 8 0; 5 7 0] and for that section of my matrix the repeated rows are =1,2,3,4. And then i need to do the same thing for a(:,4:6) but i do not know how to do it simultaneously and without writing manually the column values.
Thank you for answer me and so quickly
Hikaru
Hikaru on 11 Sep 2014
You could loop through the columns. But you'll need to find a way to store the values of IC depending on what you want to do with them.
[r,c] = size(A)
for i = 1:3:c
[C,IA,IC] = unique(A(:,i:i+2),'rows')
end

Community Treasure Hunt

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

Start Hunting!