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

NumPy模块提供了一个函数,可以在给定的轴上使用关键字指定的算法执行间接排序。这个函数返回一个与'a'相同形状的索引数组,它可以对数组进行排序。

语法:

numpy.argsort(a, axis=-1, kind=None, order=None)

参数:

numpy.argsort() 函数有以下参数:

a: array_like

这个参数定义了我们要对其进行排序的源数组。

axis: int 或 None(可选)

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

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

这个参数定义了排序算法。默认情况下,算法是 quicksortmergesortstable 都在底层使用了时间排序算法。实际的实现会因数据类型而异。mergesort 选项是为了保持向后兼容性。

order: str 或 str 列表(可选)

如果 'a' 是一个具有定义字段的数组,这个参数指定首先比较哪些字段、第二个字段等。可以将单个字段指定为字符串,并且不需要指定所有字段。但是,未指定的字段仍然会按照它们在 dtype 中出现的顺序使用,以解决平局。

返回值: index_array: ndarray, int

这个函数返回一个数组,其中包含'a'沿着指定轴的排序索引。如果'a'是1-D数组,则'a[index_array]'会得到一个排序后的'a'。更一般地说,np.take_along_axis(arr1, index_array, axis=axis) 总是会得到排序后的'a',不论其维数如何。

示例 1: np.argsort()

import numpy as np  
a=np.array([456,11,63])  
a  
b=np.argsort(a)  
b

在上面的代码中

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

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

输出:

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

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

import numpy as np  
a = np.array([[0, 5], [3, 2]])  
indices = np.argsort(a, axis=0)    
indices  

输出:

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

示例 3: 对于 2-D 数组(axis=0 的替代方法)

import numpy as np  
a = np.array([[0, 5], [3, 2]])  
indices = np.argsort(a, axis=0)  
indices  
np.take_along_axis(a, indices, axis=0)  

在上面的代码中

  • 我们导入了别名为 np 的 numpy 库。
  • 我们使用 np.array() 函数创建了一个名为 'a' 的 2-D 数组。
  • 我们声明了变量 'indices',并将 np.argsort() 函数的返回值赋给它。
  • 我们在函数中传递了 2-D 数组 'a' 和轴为 0。
  • 接下来,我们使用 take_along_axis() 函数,传递源数组、索引和轴。
  • 这个函数返回了排序后的 2-D 数组。

在输出中,显示了一个包含排序后元素的 2-D 数组。

输出:

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

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

import numpy as np  
a = np.array([[0, 5], [3, 2]])  
indices = np.argsort(a, axis=1)    
indices  

输出:

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

示例 5: 对于 2-D 数组(axis=1 的替代方法)

import numpy as np  
a = np.array([[0, 5], [3, 2]])  
indices = np.argsort(a, axis=1)  
indices  
np.take_along_axis(a, indices, axis=1)  

输出:

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

示例 6: 对于 N-D 数组

import numpy as np  
a = np.array([[0, 5], [3, 2]])  
indices = np.unravel_index(np.argsort(a, axis=None), a.shape)  
indices  
a[indices]  # same as np.sort(a, axis=None)  

输出:

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

在上面的代码中

  • 我们导入了别名为 np 的 numpy 库。
  • 我们使用 np.array() 函数创建了一个名为 'a' 的 N-D 数组。
  • 我们声明了一个变量 'indices',并将 np.unravel_index() 函数的返回值赋给它。
  • 我们在函数中传递了 np.argsort() 函数和数组 'a' 的形状。
  • 我们传递了 2-D 数组 'a' 和 axis=None 给 argsort() 函数。
  • 接下来,我们尝试打印 'indices' 和 a[indices]。

在输出中,显示了一个包含排序后元素的 N-D 数组。

示例 7: 带有键的排序

import numpy as np  
a= np.array([(0, 5), (3, 2)], dtype=[('x', '<i4'), ('y', '<i4')])  
a  
b=np.argsort(a, order=('x','y'))  
b  
c=np.argsort(a, order=('y','x'))  
c  

输出:

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, NumPy教程, NumPy学习, NumPy安装, NumPy入门教程, NumPy进阶教程, NumPy指南, NumPy学习指南, NumPy库, NumPy库学习, NumPy库入门, NumPy库教程, NumPy应用, NumPy库进阶