Ranking row values of matrix without adjustment
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposte (1)
Jos (10584)
il 4 Dic 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 Commenti
David Goodmanson
il 4 Dic 2016
For a matrix you can also do
[~,a] = sort(M);
[~,rankM] = sort(a);
Vedere anche
Categorie
Scopri di più su Linear Algebra in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!