Identifying the repeated rows in a matrix and comparing them to another matrix
    4 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
I need to check which rows of a matrix A are inside another matrix B and if there are repeated rows from the matrix A, then identify the repeated ones and count how many repeated rows are found but for each different set of values. I have tried with ismember and unique functions but i don't know how to keep track of which are the repeated rows and count how many times thoserows are repeated.
A= [4 4; 2 3; 4 2; 3 3; 2 3; 1 3; 3 3]
B=[1 1; 2 1; 3 1; 4 1; 1 2; 2 2; 3 2; 4 2; 1 3; 2 3; 3 3; 4 3; 1 4; 2 4; 3 4; 4 4]
0 Commenti
Risposta accettata
  infinity
      
 il 20 Giu 2019
        Hello, 
you can refer my answer as follows 
clear
A= [4 4; 2 3; 4 2; 3 3; 2 3; 1 3; 3 3];
B=[1 1; 2 1; 3 1; 4 1; 1 2; 2 2; 3 2; 4 2; 1 3; 2 3; 3 3; 4 3; 1 4; 2 4; 3 4; 4 4];
n = size(A,1);
rowAinB = [];
for i = 1:n
    [LIA,LOCB] = ismember(A(i,:),B,'rows','legacy');
    if ~isempty(LOCB)
        rowAinB = [rowAinB i];
    end
end
repeatA = [];
C = unique(A,'rows','stable');
for i = 1:n
    [LIA,LOCB] = ismember(A(i,:),C,'rows','legacy');
    repeatA = [repeatA LOCB];
end
m = size(C,1);
coutrepeatA = zeros(m,1);
for i = 1:m
    idx = find(repeatA == repeatA(i));
    coutrepeatA(i) = length(idx)-1;
end
the unique of matrix A is C and number of repeated row of C is stored in vector "coutrepeatA". As you can see the results below 
A =
     4     4
     2     3
     4     2
     3     3
     2     3
     1     3
     3     3
C =
     4     4
     2     3
     4     2
     3     3
     1     3
coutrepeatA =
     0
     1
     0
     1
     1     
Best regards, 
Trung
2 Commenti
  infinity
      
 il 21 Giu 2019
				Hello, 
For the case of sorting matrix A. We should modify a little bit in the code since I have written it in very specific way. Here you can refer the modify 
clear
% A= [4 4; 2 3; 4 2; 3 3; 2 3; 1 3; 3 3];
A= [4 4; 2 3; 4 2; 3 3; 2 3; 1 3; 3 3; 4 4; 3 3; 4 2; 1 2];
B=[1 1; 2 1; 3 1; 4 1; 1 2; 2 2; 3 2; 4 2; 1 3; 2 3; 3 3; 4 3; 1 4; 2 4; 3 4; 4 4];
A = sortrows(A);
n = size(A,1);
rowAinB = [];
for i = 1:n
    [LIA,LOCB] = ismember(A(i,:),B,'rows','legacy');
    if ~isempty(LOCB)
        rowAinB = [rowAinB i];
    end
end
repeatA = [];
C = unique(A,'rows','stable');
for i = 1:n
    [LIA,LOCB] = ismember(A(i,:),C,'rows','legacy');
    repeatA = [repeatA LOCB];
end
m = size(C,1);
coutrepeatA = zeros(m,1);
for i = 1:m
    idx = find(repeatA == i);
    coutrepeatA(i) = length(idx);
end
I have tested for the new matrix A that you provided in the above comment. 
Hope it could help you. 
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Logical in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!