如何对 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 中执行其他常见任务:

如何从 NumPy 数组中删除重复元素
如何将 NumPy 浮点数数组转换为整数
如何将 NumPy 矩阵转换为数组

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注