如何对 numpy 数组中的元素进行排序(带有示例)
您可以使用以下任意方法来计算 NumPy 数组中元素的顺序:
方法 1:使用 NumPy 中的 argsort()
import numpy as np
ranks = np. array (my_array). argsort (). argsort ()
方法2:使用SciPy的Rankdata()
from scipy. stats import rankdata
ranks = rankdata(my_array)
以下示例展示了如何在实践中使用以下 NumPy 数组的每种方法:
import numpy as np
#define array of values
my_array = np. array ([3, 5, 2, 1, 9, 9])
#view array
print (my_array)
[3 5 2 1 9 9]
示例 1:使用 argsort() 对 NumPy 数组中的元素进行排序
以下代码展示了如何使用 NumPy 的argsort()函数对数组元素进行排序:
#calculate rank of each item in array
ranks = np. array (my_array). argsort (). argsort ()
#view ranks
print (ranks)
[2 3 1 0 4 5]
结果显示原始数组中每个元素的排名, 0代表最低值。
这种方法的优点是不需要加载任何额外的模块,但缺点是argsort()只有一种处理链接的方法。
默认情况下, argsort()使用序数方法来处理链接,这意味着首先出现的链接值会自动获得较低的排名。
示例 2:使用 Rankdata() 对 NumPy 数组中的元素进行排名
以下代码展示了如何使用 SciPy 的Rankdata()函数对数组元素进行排名:
from scipy. stats import rankdata
#calculate rank of each item in array
ranks = rankdata(my_array)
#view ranks
print (ranks)
array([3. , 4. , 2. , 1. , 5.5, 5.5])
结果显示原始数组中每个元素的排名,其中1代表最小值。
如果您希望0代表最小值,只需将每个值减去 1:
from scipy. stats import rankdata
#calculate rank of each item in array
ranks = rankdata(my_array) - 1
#view ranks
print (ranks)
[2. 3. 1. 0. 4.5 4.5]
默认情况下, Rankdata()函数将平均排名分配给所有具有联系的值。
但是,您可以使用方法参数以不同的方式处理链接。
例如,以下代码显示了如何使用序数作为链接管理方法:
from scipy. stats import rankdata
#calculate rank of each item in array
ranks = rankdata(my_array, method=' ordinal ') - 1
#view ranks
print (ranks)
[2 3 1 0 4 5]
这会产生与 NumPy 的argsort()方法相同的结果。
其他链接管理方法包括最小、最大和密集。
了解SciPy 文档中的每种方法。
其他资源
以下教程解释了如何在 NumPy 中执行其他常见任务: