python numpy-argsort函数

文档说明(装逼用)

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', '>> x
    array([(1, 0), (0, 1)],
          dtype=[('x', '>> 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,以此类推。

python numpy-argsort函数_第1张图片
Numbers作图

再举一个三维数组的例子(在应用方面三维数组比较少用,这里只是为了充分说明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个元素进行排序


python numpy-argsort函数_第2张图片
Numbers作图

②axis=0,此时我们在第一维度,�根据shape函数可知,有2个元素,所以我们要对每组的2个元素进行排序

python numpy-argsort函数_第3张图片
Numbers作图

③axis=1,此时我们在第二维度,根据shape函数可知,有2个元素,所以要对每组的2个元素进行排序

python numpy-argsort函数_第4张图片
Numbers作图

④axis=2,与①同

你可能感兴趣的:(python numpy-argsort函数)