Finding rows in a matrix
1 view (last 30 days)
Show older comments
I have a matrix A = [1 2; 2 1; 1 2; 2 2; 1 1; 2 2]
I want to count how many times the row [1 2] appears in above matrix A. Here for my counting purpose [1 2] would appear 3 times as [1 2] or [2 1].
Thanks guys
0 Comments
Accepted Answer
Matt Fig
on 6 Oct 2012
Edited: Matt Fig
on 7 Oct 2012
Another:
% The given matrix
A = [1 2; 2 1; 1 2; 2 2; 1 1; 2 2];
% Now find the counts.
[I,J,K] = unique(sort(A,2),'rows'); % I has the unique rows.
C = histc(K,1:max(K)); % This has the corresponding counts.
% Now that we have found the counts, display them:
fprintf('Row [%i %i] appears %i times. \n',[I C]')
If you want to only get the counts for the one type, this will do it quickly:
cnt = sum(all(bsxfun(@eq,sort(A,2),[1,2]),2));
0 Comments
More Answers (2)
Azzi Abdelmalek
on 6 Oct 2012
Edited: Azzi Abdelmalek
on 6 Oct 2012
A = randi(2,10,2)
idx=find(any(repmat([1 2],size(A,1),1)-sort(A,2),2)==0)
0 Comments
Image Analyst
on 6 Oct 2012
Here's a brute force approach:
A = [1 2; 2 1; 1 2; 2 2; 1 1; 2 2]
sortedA = sort(A, 2)
uniqueRows = unique(sortedA, 'rows')
counts = zeros(1, size(uniqueRows, 1)); % Preallocate.
for row = 1 : size(uniqueRows, 1)
for rowA = 1 : size(A, 1)
matches = sortedA(rowA, :) == uniqueRows(row, :);
if all(matches)
counts(row) = counts(row) + 1;
end
end
end
counts
In the command window:
A =
1 2
2 1
1 2
2 2
1 1
2 2
sortedA =
1 2
1 2
1 2
2 2
1 1
2 2
uniqueRows =
1 1
1 2
2 2
counts =
1 3 2
0 Comments
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!