필터 지우기
필터 지우기

Ranking row values of matrix without adjustment

조회 수: 4 (최근 30일)
Tommaso Fornaciari
Tommaso Fornaciari 2016년 12월 4일
댓글: Jos (10584) 2016년 12월 5일
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

답변 (1개)

Jos (10584)
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
David Goodmanson 2016년 12월 4일
For a matrix you can also do
[~,a] = sort(M);
[~,rankM] = sort(a);
Jos (10584)
Jos (10584) 2016년 12월 5일
Yes, sure, I just overlooked that. Thanks, David!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by