NumPy numpy.argsort()的使用

NumPy numpy.argsort()的使用

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’的值。

输出中显示了一个包含索引(表示排序后数组中元素的位置)和数据类型的ndarray。

输出:

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

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

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:对于二维数组(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’。
  • 我们声明了一个变量indices,并赋值为np.argsort()函数的返回值。
  • 我们将二维数组’a’和轴0作为参数传递给函数。
  • 接下来,我们使用take_along_axis()函数,并传递了源数组、indices和轴。
  • 此函数返回了排序后的二维数组。

输出中显示了一个二维数组,其中元素已排序。

输出:

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

示例4:对于二维数组(按照最后一个轴进行排序)

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维数组(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’。
  • 我们声明了一个变量’indices’并赋值为np.unravel_index()函数的返回值。
  • 我们将np.argsort()函数和数组’a’的形状作为参数传递。
  • 我们将二维数组’a’和轴为1的参数传递给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’)]的排序后的数组。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程