Ranking row values of matrix without adjustment
조회 수: 3 (최근 30일)
이전 댓글 표시
Hello, I have a matrix that is 8000x600 and I need an output matrix of the same dimensions, containing the ranks of each element per row. I have used tiedrank but this averages the two ranks of equal observations and assigns to both that rank, which is not useful for me.
To make it simple, if I have [ 7 6 2 9 2] I would like the output to have [4 3 1 5 2] so that the value "2" gets 2 different ranks and not the average as [4 3 1.5 5 1.5].
Thank you in advance for your help
댓글 수: 0
답변 (1개)
Jos (10584)
2016년 12월 4일
for a vector:
V = [ 7 6 2 9 2]
[~,r] = sort(V)
rankV(r) = 1:numel(V)
for a matrix, you can loop over the columns
M = magic(5)
[~,r] = sort(M)
szM = size(M)
rankM = zeros(szM) % pre-allocation
ridx = 1:szM(1)
for k=1:szM(2)
rankM(r(:,k),k) = ridx
end
Other approaches using, for instance, ndgrid and sub2ind are also fine but less readable, I think.
댓글 수: 2
David Goodmanson
2016년 12월 4일
For a matrix you can also do
[~,a] = sort(M);
[~,rankM] = sort(a);
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!