NumPy argsort() 函数返回对数组进行排序的索引。
语法
numpy.argsort(a, axis=-1, kind=None, order=None)
参数
a | 必填。 指定要排序的数组。 |
axis | 可选。 指定排序的轴。如果没有,则在排序之前将数组展平。默认值为 -1,沿最后一个轴排序。 |
kind | 可选。 指定排序算法。它可以从 {'quicksort', 'mergesort', 'heapsort', 'stable'} 中获取值。默认值:"快速排序" |
order | 可选。 指定包含字段的字符串或字符串列表。当a是定义了字段的数组时,该参数指定需要比较的字段的顺序。 |
返回值
返回沿指定轴对 a 进行排序的索引数组。如果 a 是一维的,则 a[index_array] 会生成排序后的 a。更一般而言,np.take_along_axis(a, index_array, axis=axis) 始终生成排序的 a,无论维数如何。
示例:
在下面的示例中,argsort() 函数用于获取索引,该索引进一步用于生成排序后的数组。
import numpy as np
Arr = np.array([50, 40, 10, 60, 30, 20])
#显示数组
print("原始数组:")
print(Arr)
#从 argsort() 获取索引
x = np.argsort(Arr)
print("\nIndices from argsort():")
print(x)
#产生排序数组
print("\n排序数组:")
print(Arr[x])
上面的代码将是:
原始数组:
[50 40 10 60 30 20]
Indices from argsort():
[2 5 4 1 0 3]
排序数组:
[10 20 30 40 50 60]
示例:使用 axis 参数
axis 参数可用于获取将排序的索引沿给定轴的数组,如下例所示:
import numpy as np
Arr = np.array([[40,10],
[20,50]])
#显示数组
print("原始数组:")
print(Arr)
#产生沿轴排序的数组=0
x = np.argsort(Arr, axis=0)
print("\nSorted array along axis=0:")
print(np.take_along_axis(Arr, x, axis=0))
#产生沿轴排序的数组=1
y = np.argsort(Arr, axis=1)
print("\nSorted array along axis=1:")
print(np.take_along_axis(Arr, y, axis=1))
上述代码的输出将是:
原始数组:
[[40 10]
[20 50]]
Sorted array along axis=0:
[[20 10]
[40 50]]
Sorted array along axis=1:
[[10 40]
[20 50]]
示例:使用order参数
order参数可用于指定哪个字段需要先排序。考虑下面的示例:
import numpy as np
Arr = np.array([(20,60),
(20,50),
(20,55),
(10,75),
(10,25),
(10,50)],
dtype=[('x', '<i4'), ('y', '<i4')])
#显示数组
print("原始数组:")
print(Arr)
#产生排序数组
indices = np.argsort(Arr, order=('x','y') )
print("\n排序数组:")
print(Arr[indices])
上述代码的输出将是:
原始数组:
[(20, 60) (20, 50) (20, 55) (10, 75) (10, 25) (10, 50)]
排序数组:
[(10, 25) (10, 50) (10, 75) (20, 50) (20, 55) (20, 60)]