等值=等级

时间:2013-04-05 05:38:03

标签: wolfram-mathematica

我想对列表的元素进行排名,使得具有相同值的元素也获得相同的排名:

list = {1, 2, 3, 4, 4, 5}

期望的输出:

ranks = {5, 4, 3, 2, 2, 1}

Ordering[]几乎可以完成我想要的操作,但会为列表中4的两个实例指定不同的等级。

1 个答案:

答案 0 :(得分:1)

我不确定我是否涵盖了您的所有内容,但以下代码将提供所需的输出。它预先假定最小值是最高等级,并且应该使用数值或只要您对Mathematica的标准排序顺序没有问题。局部变量dv是“不同值”的短名称。

  FromListToRanks[k_List]:= Module[ {dv=Reverse[Union[k]]},
    k /. Thread[dv -> Range[Length[dv]]] ]


  FromListToRanks[list]

  {5,4,3,2,2,1}