numpy.argsort() 是用于返回数组排序后的索引值的函数,而不是排序后的数组本身。它常用于需要排序后原始位置索引的情况。可以获取排序后对应原始索引(如用于 Top-N),用于与 take()、fancy indexing 配合实现复杂排序,在机器学习中,选取得分排名靠前的样本或特征。本文主要介绍一下NumPy中argsort方法的使用。

numpy.argsort

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

返回将对数组进行排序的索引。

使用kind关键字指定的算法沿给定的轴执行间接排序。 它沿给定轴按排序顺序返回与该索引数据具有相同形状的索引数组。

参数 :

a :array_like

数组进行排序。

axisintNone, 可选

要排序的轴。 默认值为-1(最后一个轴)。

 如果为None,则使用展平的数组。

kind :{‘quicksort’, ‘mergesort’, 

‘heapsort’, ‘stable’}, 可选

排序算法。 默认值为 ‘quicksort’。 请注意,

 ‘stable’和‘mergesort’在后台都使用了timsort

通常情况下,实际实现会因数据类型而异。 

保留‘mergesort’选项是为了向后兼容。 

在1.15.0版中进行了更改。:添加了‘stable’选项。

或derstr strlist  , 可选

a是定义了字段的数组时,

此参数指定要比较的字段的第一个,

第二个等。单个字段可以指定为字符串,

并且不需要指定所有字段,

但是仍将使用未指定的字段。 

他们以dtype出现的顺序来打破关系。

返回值 :

index_arrayndarray, int

沿指定轴对排序的索引数组。 

如果a是一维的,则a [index_array]产生排序的a。

 更一般而言,

np.take_along_axis(a,index_array,axis = axis)

总是产生排序的a,而与尺寸无关。

Notes

有关不同排序算法的说明,请参见sort

从NumPy 1.4.0起,argsort可用于包含nan值的实数/复杂数组。 增强的sort顺序已按顺序记录。

例子

1)一维数组排序索引

import numpy as np

a = np.array([3, 1, 2])
indices = np.argsort(a)
# 输出:[1 2 0]
print(indices)         
# 输出:[1 2 3],即排序后的结果
print(a[indices])     

2)二维数组按列排序索引(默认 axis = -1,即按行)

import numpy as np

a = np.array([[3, 1, 2], [6, 4, 5]])
indices = np.argsort(a)
print(indices)
# 输出:
# [[1 2 0]
#  [1 2 0]]

# 每行的排序索引

3)二维数组按列(axis=0)排序索引

import numpy as np

a = np.array([[3, 1, 2], [6, 4, 5]])
indices = np.argsort(a, axis=0)
print(indices)
# 输出:
# [[0 0 0]
#  [1 1 1]]

4)用 argsort() 做间接排序(获取排序后的值)

import numpy as np

a = np.array([50, 20, 30, 10])
sorted_a = a[np.argsort(a)]
print(sorted_a)  # 输出:[10 20 30 50]

推荐文档

相关文档

大家感兴趣的内容

随机列表