sort in matlab and assign ranking

别说谁变了你拦得住时间么 提交于 2019-11-26 21:41:23

问题


Hi I need to sort a vector and assign a ranking for the corresponding sorting order. I'm using sort function [sortedValue_X , X_Ranked] = sort(X,'descend'); but the problem is it assigns different ranks for the same values (zeros). i.e. x = [ 13 15 5 5 0 0 0 1 0 3] and I want zeros to take the same last rank which is 6 and fives needs to share the 3rd rank etc.. any suggestions?


回答1:


The syntax [sortedValues, sortedIndexes] = sort(x, 'descend') does not return rank as you describe it. It returns the indexes of the sorted values. This is really useful if you want to use the sort order from one array to rearrange another array.

As suggested by @user1860611, unique seems to do what you want, using the third output as follows:

x = [ 13 15 5 5 0 0 0 1 0 3];
[~, ~, forwardRank] = unique(x);
%Returns
%forwardRank =
%     5     6     4     4     1     1     1     2     1     3

To get the order you want (decending) you'll need to reverse the order, like this:

reverseRank = max(forwardRank) - forwardRank  + 1
%Returns
%reverseRank =
%    2     1     3     3     6     6     6     5     6     4

You may be done at this point. But you may want to sort these into the into an acsending order. This is a reorder of the reverseRank vector which keeping it in sync with the original x vector, which is exactly what the 2nd argument of sort is desined to help with. So we can do something like this:

[xSorted, ixsSort] = sort(x, 'descend');    %Perform a sort on x
reverseRankSorted = reverseRank(ixsSort);   %Apply that sort to reverseRank

Which generates:

xSorted =           15    13     5     5     3     1     0     0     0     0
reverseRankSorted =  1     2     3     3     4     5     6     6     6     6



回答2:


tiedrank.m might be the thing you are looking for.

>> x = round(rand(1,5)*10)
x =
8     7     3    10     0
>> tiedrank(x)
ans =
4     3     2     5     1


来源:https://stackoverflow.com/questions/14448759/sort-in-matlab-and-assign-ranking

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!