NumPy教程-numpy.argsort()在Python中的使用

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'}(可选)
这个参数定义了排序算法。默认情况下,算法是 quicksort。mergesort 和 stable 都在底层使用了时间排序算法。实际的实现会因数据类型而异。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')]。