Numpy数组对所有元素进行排名 [英] Numpy Array Rank All Elements

查看:96
本文介绍了Numpy数组对所有元素进行排名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个二维numpy数组,我想知道如何创建一个新的二维numpy数组来表示基于原始2d数组中所有项的值的排名./p>

我想使用以下数组:

  anArray = [[18.5,25.9,7.4,11.1,11.1][33.3,37.,14.8,22.2,25.9][29.6、29.6、11.1、14.8、11.1][25.9、25.9、14.8、14.8、11.1][29.6、25.9、14.8、11.1、7.4]] 

创建一个新的按等级排序的数组[基于所有值,并且对多个数字具有相同的等级]:

  anOrder = [[6,4,9,8,8][2,1,7,5,4][3、3、8、7、8][4,4,7,7,8][3,4,7,8,9] 

谢谢.

解决方案

这是 解决方案

That's a routine work for np.unique with its optional argument return_inverse that tags each element based on the uniqueness among other elements, like so -

_,id = np.unique(anArray,return_inverse=True)
out = (id.max() - id + 1).reshape(anArray.shape)

Sample run -

In [17]: anArray
Out[17]: 
array([[ 18.5,  25.9,   7.4,  11.1,  11.1],
       [ 33.3,  37. ,  14.8,  22.2,  25.9],
       [ 29.6,  29.6,  11.1,  14.8,  11.1],
       [ 25.9,  25.9,  14.8,  14.8,  11.1],
       [ 29.6,  25.9,  14.8,  11.1,   7.4]])

In [18]: _,id = np.unique(anArray,return_inverse=True)

In [19]: (id.max() - id + 1).reshape(anArray.shape)
Out[19]: 
array([[6, 4, 9, 8, 8],
       [2, 1, 7, 5, 4],
       [3, 3, 8, 7, 8],
       [4, 4, 7, 7, 8],
       [3, 4, 7, 8, 9]])

这篇关于Numpy数组对所有元素进行排名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆