而无需对数组进行两次排序

而无需对数组进行两次排序

本文介绍了使用Python/NumPy对数组中的项目进行排名,而无需对数组进行两次排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我有一个数字数组,我想创建另一个数组,该数组代表第一个数组中每个项目的排名.我正在使用Python和NumPy.

I have an array of numbers and I'd like to create another array that represents the rank of each item in the first array. I'm using Python and NumPy.

例如:

array = [4,2,7,1]
ranks = [2,1,3,0]

这是我想出的最好方法:

Here's the best method I've come up with:

array = numpy.array([4,2,7,1])
temp = array.argsort()
ranks = numpy.arange(len(array))[temp.argsort()]

有没有更好/更快的方法来避免对数组进行两次排序?

Are there any better/faster methods that avoid sorting the array twice?

推荐答案

在最后一步中使用左侧的切片:

Use slicing on the left-hand side in the last step:

array = numpy.array([4,2,7,1])
temp = array.argsort()
ranks = numpy.empty_like(temp)
ranks[temp] = numpy.arange(len(array))

这避免了通过在最后一步反转排列来进行两次排序.

This avoids sorting twice by inverting the permutation in the last step.

这篇关于使用Python/NumPy对数组中的项目进行排名,而无需对数组进行两次排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 13:29