Borrar filtros
Borrar filtros

Ranking row values of matrix without adjustment

4 visualizaciones (últimos 30 días)
Tommaso Fornaciari
Tommaso Fornaciari el 4 de Dic. de 2016
Comentada: Jos (10584) el 5 de Dic. de 2016
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

Respuestas (1)

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

Iniciar sesión para comentar.

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by