Identifying the repeated rows in a matrix and comparing them to another matrix
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
infinity
2019-6-20
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 个评论
infinity
2019-6-21
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!