Python中的numpy.argsort()

2024 年 8 月 29 日 | 4 分钟阅读

NumPy模块提供了一个函数argsort(),它返回将对数组进行排序的索引。

NumPy模块提供了一个函数,用于借助关键字指定的算法,沿着给定的轴执行间接排序。该函数返回一个与'a'形状相同的索引数组,该数组将对该数组进行排序。

语法

参数

以下是numpy.argsort()函数中的参数

a:类似数组

此参数定义要排序的源数组。

axis:int 或 None(可选)

此参数定义执行排序的轴。默认情况下,轴为-1。如果将此参数设置为None,则使用扁平化数组。

kind: {'quicksort','mergesort','heapsort','stable'}(可选)

此参数定义排序算法。默认情况下,该算法是quicksortmergesortstable都在底层使用时间排序。实际实现将随数据类型而异。保留mergesort选项是为了向后兼容。

order: str 或 str列表(可选)

如果'a'是具有已定义字段的数组,则此参数指定首先比较哪些字段,第二个比较哪些字段,依此类推。单个字段可以指定为字符串,并且不需要指定所有字段。但是,未指定的字段仍将按照它们在dtype中出现的顺序使用,以打破联系。

返回值: index_array: ndarray, int

此函数返回一个索引数组,该数组沿指定轴对'a'进行排序。如果'a'是一维的,则a[index_array]会产生排序后的'a'。更一般地,np.take_along_axis(arr1, index_array, axis=axis) 总是产生排序后的'a',而与维度无关。

示例1: np.argsort()

在上面的代码中

  • 我们使用别名 np 导入了 numpy。
  • 我们使用 np.array() 函数创建了一个数组“a”。
  • 我们声明了变量'b'并分配了np.argsort()函数的返回值。
  • 我们在函数中传递了数组“a”。
  • 最后,我们尝试打印 b 的值。

在输出中,显示了一个ndarray,其中包含索引(指示排序数组的元素位置)和dtype。

输出

array([456,  11,  63])
array([1, 2, 0], dtype=int64)

示例2: 对于二维数组(沿第一个轴排序(向下))

输出

array([[0, 1],
       	[1, 0]], dtype=int64)

示例3: 对于二维数组(axis=0的替代方法)

在上面的代码中

  • 我们使用别名 np 导入了 numpy。
  • 我们使用np.array()函数创建了一个二维数组'a'。
  • 我们声明了变量indices并分配了np.argsort()函数的返回值。
  • 我们传递了二维数组'a',轴为0。
  • 接下来,我们使用了take_along_axis()函数,并传递了源数组,索引和轴。
  • 此函数已返回排序后的二维数组。

在输出中,显示了一个带有排序元素的二维数组。

输出

array([[0, 2],
       	[3, 5]])

示例4: 对于二维数组(沿最后一个轴排序(横向))

输出

array([[0, 1],
       	[1, 0]], dtype=int64) 

示例5: 对于二维数组(axis=1的替代方法)

输出

array([[0, 2],
       	[3, 5]])

示例6: 对于N维数组

输出

(array([0, 1, 1, 0], dtype=int64), array([0, 1, 0, 1], dtype=int64))
array([0, 2, 3, 5])

在上面的代码中

  • 我们使用别名 np 导入了 numpy。
  • 我们使用np.array()函数创建了一个二维数组'a'。
  • 我们声明了一个变量'indices'并分配了np.unravel_index()函数的返回值。
  • 我们传递了np.argsort()函数和数组'a'的形状。
  • 我们在argsort()函数中传递了二维数组'a',轴为1。
  • 接下来,我们尝试打印索引和a[indices]的值。

在输出中,显示了一个带有排序元素的N维数组。

示例7: 使用键排序

输出

array([(0, 5), (3, 2)], dtype=[('x', '<i4'), ('y', '<i4')])
array([0, 1], dtype=int64)
array([1, 0], dtype=int64)

在上面的代码中

  • 我们使用别名 np 导入了 numpy。
  • 我们使用np.array()函数创建了一个二维数组'a',dtype=[('x', '<i4'), ('y', '<i4')]。
  • 我们声明了变量'b'和'c'并分配了np.argsort()函数的返回值。
  • 我们在函数中传递了数组'a',并将order作为参数。
  • 最后,我们尝试打印'b'和'c'的值。

在输出中,显示了一个排序后的数组,dtype=[('x', '<i4'), ('y', '<i4')]


下一个主题numpy.transpose()