文档说明(装逼用)
Help on function argsort in module numpy.core.fromnumeric:
argsort(a, axis=-1, kind='quicksort', order=None)
Returns the indices that would sort an array.
Perform an indirect sort along the given axis using the algorithm specified
by the `kind` keyword. It returns an array of indices of the same shape as
`a` that index data along the given axis in sorted order.
Parameters
----------
a : array_like
Array to sort.
axis : int or None, optional
Axis along which to sort. The default is -1 (the last axis). If None,
the flattened array is used.
kind : {'quicksort', 'mergesort', 'heapsort'}, optional
Sorting algorithm.
order : str or list of str, optional
When `a` is an array with fields defined, this argument specifies
which fields to compare first, second, etc. A single field can
be specified as a string, and not all fields need be specified,
but unspecified fields will still be used, in the order in which
they come up in the dtype, to break ties.
Returns
-------
index_array : ndarray, int
Array of indices that sort `a` along the specified axis.
If `a` is one-dimensional, ``a[index_array]`` yields a sorted `a`.
See Also
--------
sort : Describes sorting algorithms used.
lexsort : Indirect stable sort with multiple keys.
ndarray.sort : Inplace sort.
argpartition : Indirect partial sort.
Notes
-----
See `sort` for notes on the different sorting algorithms.
As of NumPy 1.4.0 `argsort` works with real/complex arrays containing
nan values. The enhanced sort order is documented in `sort`.
Examples
--------
One dimensional array:
>>> x = np.array([3, 1, 2])
>>> np.argsort(x)
array([1, 2, 0])
Two-dimensional array:
>>> x = np.array([[0, 3], [2, 2]])
>>> x
array([[0, 3],
[2, 2]])
>>> np.argsort(x, axis=0)
array([[0, 1],
[1, 0]])
>>> np.argsort(x, axis=1)
array([[0, 1],
[0, 1]])
Sorting with keys:
>>> x = np.array([(1, 0), (0, 1)], dtype=[('x', '<i4'), ('y', '<i4')])
>>> x
array([(1, 0), (0, 1)],
dtype=[('x', '<i4'), ('y', '<i4')])
>>> np.argsort(x, order=('x','y'))
array([1, 0])
>>> np.argsort(x, order=('y','x'))
array([0, 1])
只有第一个参数(输入数组)是必选,都是可选的(optional),它们的默认值已在函数定义中给出。这里暂时只说明参数axis,其他的以后用到再补充。
看两个例子就懂了
a = array([9, 8, 7, 6, 5, 4, 3, 1, 2])
print(a.argsort())
结果
[7, 8, 6, 5, 4, 3, 2, 1, 0]
数组a最小的数字是1,其索引为7,所以输出数组第一个元素为7;第二小的数字是2,其索引为8,所以输出数组第二个元素为8,以此类推。
再举一个三维数组的例子(在应用方面三维数组比较少用,这里只是为了充分说明axis参数的作用)
b = array([[[0, 1, 2, 0, 1, 2], [1, 6, 3, 2, 5, 7]],
[[0, 1, 2, 0, 1, 2], [8, 9, 1, 0, 2, 4]]])
print('{0}\n'.format(b.shape))
print('{0}\n'.format(b.argsort())) //①
print('{0}\n'.format(b.argsort(axis=0))) //②
print('{0}\n'.format(b.argsort(axis=1))) //③
print('{0}\n'.format(b.argsort(axis=2))) //④
结果
(2, 2, 6)
[[[0, 3, 1, 4, 2, 5],
[0, 3, 2, 4, 1, 5]],
[[0, 3, 1, 4, 2, 5],
[3, 2, 4, 5, 0, 1]]]
[[[0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 1]],
[[1, 1, 1, 1, 1, 1],
[1, 1, 0, 0, 0, 0]]]
[[[0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1]],
[[0, 0, 1, 0, 0, 0],
[1, 1, 0, 1, 1, 1]]]
[[[0, 3, 1, 4, 2, 5],
[0, 3, 2, 4, 1, 5]],
[[0, 3, 1, 4, 2, 5],
[3, 2, 4, 5, 0, 1]]]
①不带参数,�此时我们在最深维度(第三维度),根据shape函数可知,有6个元素,所以我们要对每组的6个元素进行排序
②axis=0,此时我们在第一维度,�根据shape函数可知,有2个元素,所以我们要对每组的2个元素进行排序
③axis=1,此时我们在第二维度,根据shape函数可知,有2个元素,所以要对每组的2个元素进行排序
④axis=2,与①同