【问题标题】:sort in matlab and assign ranking在matlab中排序并分配排名
【发布时间】:2013-01-21 23:01:28
【问题描述】:

您好,我需要对向量进行排序并为相应的排序顺序分配排名。我正在使用排序功能[sortedValue_X , X_Ranked] = sort(X,'descend'); 但问题是它为相同的值(零)分配了不同的等级。 即x = [ 13 15 5 5 0 0 0 1 0 3],我希望 0 获得相同的最后排名,即 6 和 5 需要共享第 3 排名等。 有什么建议吗?

【问题讨论】:

  • 你试过unique函数吗?

标签: matlab sorting ranking


【解决方案1】:

语法[sortedValues, sortedIndexes] = sort(x, 'descend') 不会像您描述的那样返回排名。它返回排序值的索引。如果您想使用一个数组的排序顺序来重新排列另一个数组,这非常有用。

正如@user1860611 所建议的,unique 似乎按照您的意愿行事,使用如下第三个输出:

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

要获得您想要的顺序(降序),您需要颠倒顺序,如下所示:

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

此时您可能已经完成了。但是您可能希望将它们按升序排列。这是reverseRank 向量的重新排序,使其与原始x 向量保持同步,这正是sort 的第二个参数旨在帮助解决的问题。所以我们可以这样做:

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

生成:

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 可能是您正在寻找的东西。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 2018-04-03
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      相关资源
      最近更新 更多