Finding rows in a matrix

1 回表示 (過去 30 日間)
Sam Da
Sam Da 2012 年 10 月 6 日
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

採用された回答

Matt Fig
Matt Fig 2012 年 10 月 6 日
編集済み: Matt Fig 2012 年 10 月 7 日
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));

その他の回答 (2 件)

Azzi Abdelmalek
Azzi Abdelmalek 2012 年 10 月 6 日
編集済み: Azzi Abdelmalek 2012 年 10 月 6 日
A = randi(2,10,2)
idx=find(any(repmat([1 2],size(A,1),1)-sort(A,2),2)==0)

Image Analyst
Image Analyst 2012 年 10 月 6 日
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

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by