Find out the rows having same values in all columns of a matrix

Hi,
I have a matrix with 4374 rows and 8 columns. I need to find the rows which have all the columns are of same values and it's repeated for 6 times.
As for example,
Let us consider a matrix, A= [ 0 0 0 0 1 0 0 ; 1 0 0 0 0 1 0; 1 0 0 0 0 1 0; 0 1 0 1 0 1 0; 1 0 0 0 0 1 0; 0 0 0 0 0 0 0; 1 0 0 0 0 1 0, 1 1 1 1 1 1 1; 1 0 0 0 0 1 0 , 0 0 1 1 0 1 0; 1 0 0 0 0 1 0; 0 0 0 0 1 0 0].
Here,0 0 0 0 1 0 0 is repeated twice and 1 0 0 0 0 1 0 is repeated for 6 times. Finally, I need to find and keep only those rows having repeated for 6 times (as like 1 0 0 0 0 1 0 in the given example) .
Can any please help me?

 Respuesta aceptada

Stephen23
Stephen23 el 26 de Nov. de 2018
Editada: Stephen23 el 26 de Nov. de 2018
Something like this should get you started:
>> A = [0,0,0,0,1,0,0;1,0,0,0,0,1,0;1,0,0,0,0,1,0;0,1,0,1,0,1,0;1,0,0,0,0,1,0;0,0,0,0,0,0,0;1,0,0,0,0,1,0;1,1,1,1,1,1,1;1,0,0,0,0,1,0;0,0,1,1,0,1,0;1,0,0,0,0,1,0;0,0,0,0,1,0,0]
A =
0 0 0 0 1 0 0
1 0 0 0 0 1 0
1 0 0 0 0 1 0
0 1 0 1 0 1 0
1 0 0 0 0 1 0
0 0 0 0 0 0 0
1 0 0 0 0 1 0
1 1 1 1 1 1 1
1 0 0 0 0 1 0
0 0 1 1 0 1 0
1 0 0 0 0 1 0
0 0 0 0 1 0 0
>> [U,~,idx] = unique(A,'rows');
>> cnt = histc(idx,unique(idx)) % count how many times rows occur.
cnt =
1
2
1
1
6
1
>> out = U(cnt==6,:) % pick which the unique rows which occur >= 6 times.
out =
1 0 0 0 0 1 0
If you want to get those multiple row instances, then try this:
>> idr = ismember(idx,find(cnt==6));
>> A(idr,:)
ans =
1 0 0 0 0 1 0
1 0 0 0 0 1 0
1 0 0 0 0 1 0
1 0 0 0 0 1 0
1 0 0 0 0 1 0
1 0 0 0 0 1 0

9 comentarios

Sky Scrapper
Sky Scrapper el 26 de Nov. de 2018
Editada: Sky Scrapper el 26 de Nov. de 2018
Yes, this is working. Thanks a lot!
But, I need to check if and only it's repeated for 6 times not more than 6 times. then it's showing nothing (void matrix)
Stephen23
Stephen23 el 26 de Nov. de 2018
Editada: Stephen23 el 26 de Nov. de 2018
Change the >= into == (as shown in my edited answer).
when i am running my original code, it's showing:
cnt= 54 in each rows having 81 total rows. Does it indicate that each row in my original matrix is repeated for 54 times?
Stephen23
Stephen23 el 26 de Nov. de 2018
Editada: Stephen23 el 26 de Nov. de 2018
"Does it indicate that each row in my original matrix is repeated for 54 times?"
The cnt values show how many times each unique row occurs in your matrix. For example, try doing this:
>> [cnt,U]
ans =
1 0 0 0 0 0 0 0
2 0 0 0 0 1 0 0
1 0 0 1 1 0 1 0
1 0 1 0 1 0 1 0
6 1 0 0 0 0 1 0
1 1 1 1 1 1 1 1
% cnt | unique rows
You can see for example, that row [0,0,0,0,1,0,0] occurs twice in A.
Sky Scrapper
Sky Scrapper el 26 de Nov. de 2018
Editada: Sky Scrapper el 26 de Nov. de 2018
okay, got the answer. I have a matrix of 4374. after counting it's showing 81 rows and 54 times repeted. that means = (54*81)= 4374.
So, you are right. Thank you very much!
Sky Scrapper
Sky Scrapper el 24 de En. de 2019
Editada: Sky Scrapper el 24 de En. de 2019
In my real matrix, i have,
A=[100 50 0 -100 0 0 0 0 1 0 0 80
100 70 0 0 0 1 0 0 0 0 1 88
100 -100 0 0 1 0 0 0 0 1 0 0
100 -100 100 0 0 1 0 1 0 1 0 95
100 100 0 -100 1 0 0 0 0 1 0 100
100 100 0 0 0 0 0 0 0 0 0 99
100 0 0 0 1 0 0 0 0 1 0 100
100 0 100 0 1 1 1 1 1 1 1 100
100 0 0 100 1 0 0 0 0 1 0 0
100 0 0 0 0 0 1 1 0 1 0 100
100 0 100 0 1 0 0 0 0 1 0 100
100 0 0 100 0 0 0 0 1 0 0 42]
I will have to delete rows having repeated values from column 5 to 11. For this, I am doing:
[U,~,idx] = unique(A(:,5:11),'rows');
Then it's showing only the valid rows havinng column 5 to 11 but I need the valid total rows.
Could you please help me?
Stephen23
Stephen23 el 24 de En. de 2019
Editada: Stephen23 el 24 de En. de 2019
Perhaps this is what you are looking for:
[~,idy,idx] = unique(A(:,5:11),'rows')
U = A(idy,:)
If not you will have to show what the expected output should be.
yes, that's I want. thank you so much!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 26 de Nov. de 2018

Comentada:

el 24 de En. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by