Ranking row values of matrix without adjustment
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Antworten (1)
Jos (10584)
am 4 Dez. 2016
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 Kommentare
David Goodmanson
am 4 Dez. 2016
For a matrix you can also do
[~,a] = sort(M);
[~,rankM] = sort(a);
Siehe auch
Kategorien
Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!