Return rank value of a row

6 visualizaciones (últimos 30 días)
Emma Kuttler
Emma Kuttler el 18 de Nov. de 2019
Comentada: Emma Kuttler el 18 de Nov. de 2019
I have a 296x1 column vector called Sscore. Each row represents the score for a node, ie row 1 represents the score for node 1.
I want to return another column vector with the rank of each row, for example, if node 5 has the 10th highest score, i want the 5th row of that new vector to have a value of 10.
My code leading up to Sscore is below. Thanks!
% weight the matrix, giving a weight to each column
weights = [0.1666667, 0.1666667, 0.1666667, 0.1666667, 0.1666667, 0.1666667];
normalimpactw = bsxfun(@times, normalimpact, weights);
max_vals = max(normalimpactw); % maximum values of each colum(1 to 6 )
Dplus = zeros(size(normalimpactw,1), 1); % initialize
for ii =1: size(normalimpactw, 1 )
Dplus(ii, :) = sqrt(sum([normalimpactw(ii,:)-max_vals].^2 ));
end
Dplus; % column matrix after calculation
min_vals = min(normalimpactw); % minimim values of each colum(1 to 6 )
Dminus = zeros(size(normalimpactw,1), 1); % initialize
for ii =1: size(normalimpactw, 1 )
Dminus(ii, :) = sqrt(sum([normalimpactw(ii,:)-min_vals].^2 ));
end
Dminus; % column matrix after calculation
Sscore = zeros(size(Dminus,1),1);
for n=1:296
Sscore(n,:) = Dminus(n,:)/(Dminus(n,:)+Dplus(n,:));
end
Sscore;
  1 comentario
Adam Danz
Adam Danz el 18 de Nov. de 2019
The 2nd output to sort() is what you're describing. I didn't dig into your code so I'm not sure how your goal differs from sort().
Sscore = randi(100,296,1);
[~, rank] = sort(Sscore);

Iniciar sesión para comentar.

Respuesta aceptada

the cyclist
the cyclist el 18 de Nov. de 2019
Editada: the cyclist el 18 de Nov. de 2019
[~,idx] = sort(Sscore,'desc');
[~,rank]= sort(idx)

Más respuestas (1)

the cyclist
the cyclist el 18 de Nov. de 2019
Here is another solution:
[~,rank] = ismember(Sscore,sort(Sscore,'desc'));
  2 comentarios
the cyclist
the cyclist el 18 de Nov. de 2019
This answer is slightly preferable to me, because it handles ties in the conventional fashion of assigning equal rank. For example
Sscore = [6 4 1 2 6 7];
% sort-sort
[~,idx] = sort(Sscore,'desc');
[~,rank1]= sort(idx)
% ismember-sort
[~,rank2] = ismember(Sscore,sort(Sscore,'desc'))
gives
rank1 =
2 4 6 5 3 1
rank2 =
2 4 6 5 2 1
Notice that the two entries with Sscore=6 are both assigned second place, and there is no 3rd place.
Emma Kuttler
Emma Kuttler el 18 de Nov. de 2019
This works well, thanks!

Iniciar sesión para comentar.

Categorías

Más información sobre Particle & Nuclear Physics 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