Count how many times a number appears in a matrix and assign that increasing value to a new matrix
Show older comments
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?
Accepted Answer
More Answers (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
on 2 Oct 2012
Edited: Azzi Abdelmalek
on 2 Oct 2012
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
Categories
Find more on Matrix Indexing 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!