Count how many times a number appears in a matrix and assign that increasing value to a new matrix
이전 댓글 표시
I have a 32 x 6 matrix consisting of repeats of 1-16 in each column in a specific order, e.g., :
X = [6 1 1 8 16 1
2 16 6 6 9 8
7 9 10 13 1 16
15 5 3 6 3 11
9 3 13 1 7 12
10 11 8 7 5 7
etc etc];
So given this set up, each instance of 1 - 16 will appear 12 times, twice in each column. What I need to do is create another matrix of the same size, indexing for each number where those repeats are occurring. So for example, if a column looked like this:
1
3
3
2
1
it would return:
1
1
2 (the second time 3 is appearing)
1
2 (the second time 1 is appearing)
I was thinking about using some kind of count function for each number and then perhaps applying a multiplication to it? Would be fine if these had to be separate matrices for each of the 16 numbers if that makes it any simpler. Any suggestions?
채택된 답변
추가 답변 (2개)
This relies on the assumption that each number appears exactly twice in each column (as in the posted example):
out = ones(size(X));
for ii = 1:size(X,2)
[~,idx] = unique(X(:,ii),'last');
out(idx,ii)=2;
end
Azzi Abdelmalek
2012년 10월 2일
편집: Azzi Abdelmalek
2012년 10월 2일
A=[]
for k=1:6
A=[A [randperm(16)' ;randperm(16)']]
end
% for the above example
idx=[];
for k=1:16
[ii,~]=find(A==k)
idx=[idx;reshape(ii,2,[])];
end
카테고리
도움말 센터 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!