Numpy argsort() 函数
numpy.argsort() 函数用于返回对数组进行排序的索引。此函数使用 kind 参数指定的算法沿给定轴执行间接排序。
numpy.argsort() 函数返回一个索引数组,该数组的形状与沿给定轴按排序顺序排列的索引数据相同。当我们需要排序顺序,但又想手动重新排列数组或其他数据时,此函数特别有用。
如果输入不是有效的类数组对象,或者包含无法比较或排序的元素,numpy.argsort() 函数会引发 TypeError。
语法
以下是 Python numpy.argsort() 函数的语法 -
numpy.argsort(arr, axis=-1, kind=None, order=None)
参数
以下是 Python numpy.argsort() 函数的参数 -
- arr:索引对应的输入数组计算已排序元素的顺序。
- order(可选):指定结构化数组的字段顺序。例如,按结构化数组中的多个字段排序。
- axis(可选):排序的轴 -
- -1(默认值):沿最后一个轴排序。
- 0:沿列(垂直)排序。
- 1:沿行(水平)排序。
- kind(可选):指定排序算法。选项包括:
- 快速排序(默认):快速但不稳定。
- 合并排序:稳定,并保持相等元素的相对顺序。
- 堆排序:内存效率高,但比"快速排序"慢。
- 稳定排序:NumPy 1.15 中引入的稳定排序算法。
返回类型
此函数返回一个与输入数组形状相同的索引数组,该数组表示元素的排序顺序。
示例
以下是一个简单的示例,使用 Python numpy.argsort() 函数查找对一维 NumPy 数组进行排序的索引:-
import numpy as np my_array = np.array([25, 5, 15, 10]) sorted_indices = np.argsort(my_array) print("原始数组:", my_array) print("排序后数组的索引:", sorted_indices) print("排序后数组:", my_array[sorted_indices])
输出
原始数组:[25 5 15 10] 排序后数组的索引:[1 3 2 0] 排序后数组:[ 5 10 15 25]
示例:沿序排序轴
我们可以使用 axis 参数沿多维数组中的特定轴进行排序。以下示例演示了如何对行 (axis=1) 和列 (axis=0) 进行排序 -
import numpy as np my_array = np.array([[8, 2, 7], [4, 9, 1]]) row_indices = np.argsort(my_array, axis=1) col_indices = np.argsort(my_array, axis=0) print("原始数组: ", my_array) print("按行排序的索引: ", row_indices) print("按列排序的索引: ", col_indices)
输出
原始数组: [[8 2 7] [4 9 1]] 按行排序的索引: [[1 2 0] [2 0 1]] 按列排序的索引: [[1 0 1] [0 1 0]]
示例:使用自定义数据类型排序
order 参数用于结构化数组。以下是查找按特定字段排序的索引的示例 -
import numpy as np my_array = np.array([(1, 'Zebra', 100), (2, 'Apple', 50), (3, 'Monkey', 75)], dtype=[('id', int), ('name', 'U10'), ('score', int)]) indices_by_name = np.argsort(my_array, order='name') print("原始数组: ", my_array) print("按名称排序的索引: ", indices_by_name) print("按名称排序后的数组: ", my_array[indices_by_name])
输出
原始数组: [(1, 'Zebra', 100) (2, 'Apple', 50) (3, 'Monkey', 75)] 按名称排序的索引: [1 2 0] 按名称排序后的数组: [(2, 'Apple', 50) (3, 'Monkey', 75) (1, 'Zebra', 100)]