HOWTO · NumPy

NumPy 数组中的排名值

我们可以使用 numpy.argsort() 和 scipy.stats.rankdata() 函数在 Python 中对 NumPy 数组中的值进行排名。

本页内容

本教程将介绍对 Python NumPy 数组中的数据进行排序的方法。

使用 numpy.argsort() 方法的 NumPy 排名

numpy.argsort() 方法 用于获取可用于对 NumPy 数组进行排序的索引。这些索引也可以用作数组中每个元素的排名。numpy.argsort() 方法由数组调用,并以另一个数组的形式返回数组中每个元素的排名。

import numpy as np

array = np.array([1, 8, 5, 7, 9])

temp = array.argsort()

ranks = np.empty_like(temp)

ranks[temp] = np.arange(len(array))
print(array)
print(ranks)

输出:

[1 8 5 7 9]
[0 3 1 2 4]

我们在上面的代码中使用 numpy.argsort() 函数对 NumPy 数组 array 中的元素进行排序。我们首先使用 np.array() 函数创建了我们的数组。然后我们使用 array.argsort() 函数并将值存储在 temp 数组中。之后,我们创建了另一个数组 ranks,其中包含 array 中每个元素的排名。然后,我们使用 ranks[temp] = np.arange(len(array))array 中每个元素的排名分配给 ranks 的每个元素。

上述编码示例中讨论的方法工作正常,但我们可以使用 numpy.argsort() 函数两次进一步简化我们的代码。下面的编码示例演示了这种现象。

import numpy as np

array = np.array([1, 8, 5, 7, 9])

temp = array.argsort()

ranks = temp.argsort()
print(array)
print(ranks)

输出:

[1 8 5 7 9]
[0 3 1 2 4]

我们创建了另一个数组 ranks,并使用 ranks = temp.argsort()array 中每个元素的排名分配给 ranks 的每个元素。

Python 中带有 scipy.stats.rankdata() 函数的 NumPy 排名

我们还可以使用 scipy.stats 库中的 rankdata() 函数 来获取 NumPy 数组中每个元素的排名。rankdata() 函数将数组作为输入参数,对数组内的每个元素进行排序,并以另一个相同长度的数组的形式返回结果。

from scipy.stats import rankdata
import numpy as np

array = np.array([1, 8, 5, 7, 9])

ranks = rankdata(array)
print(array)
print(ranks)

输出:

[1 8 5 7 9]
[1. 4. 2. 3. 5.]

我们首先使用 np.array() 函数创建了我们的数组。然后我们使用 rankdata(array) 函数并将值存储在 ranks 数组中。