赞
踩
用例:
numpy.argsort(a, axis=-1, kind=None, order=None)
功能:
返回数组排序后的元素索引值。
根据kind
指定的算法对数组沿着axis
轴进行排序。其返回值的形状和a
一致,返回值内容为排序后元素在原始数组中的索引。
参数
变量名 | 数据类型 | 功能 |
---|---|---|
a | 数组型变量 | 被排序的数组。 |
axis | 整型或None,可选参数 | 指定沿着哪个轴排序。默认值是-1即最后一维。若为None,则会将数组拉伸为一维。 |
kind | {‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’}, 可选参数 | 排序算法,默认为’quicksort’。注意:'stable’和’mergesort’的后端都是使用timsort算法,并且在通常情况下, 算法的计算结果会随数值类型的不同而发生改变。保留’mergesort’参数是为了向后兼容。 |
order | 字符串、字符串组成的列表,可选参数 | 当数组a定义了字段时,此参数指定先比较哪个字段再比较哪个字段。通过字符串可以单一指定某个字段, 并且并不是所有字段均需被指定,未被指定的字段也会参与排序(按照他们在 dtype 中的出现顺序进行排序)。 |
变量名 | 数据类型 | 功能 |
---|---|---|
index_array | n维数组或整数 | 将a沿着指定轴排序后其索引组成的数组。若a为一维数组,a[index_array] 生成排序后的a数组。更一般的,无论a为多少维数组,我们均可使用 np.take_along_axis(a, index_array, axis=axis) 生成排序后的a数组 |
import numpy as np # 一维数组 x = np.array([3, 1, 2]) print('一维数组的排序结果:{}'.format(np.argsort(x))) # 二维数组 x = np.array([[0, 3], [2, 2]]) print('被排序的数组为:\n{}'.format(x)) # 沿着列方向进行排序 ind = np.argsort(x, axis=0) print('列方向的排序索引为:\n{}'.format(ind)) print('列方向的排序结果为:\n{}'.format(np.take_along_axis(x, ind, axis=0))) # 沿着行方向进行排序 ind = np.argsort(x, axis=1) print('行方向的排序索引为:\n{}'.format(ind)) print('行方向的排序结果为:\n{}'.format(np.take_along_axis(x, ind, axis=1))) # n维数组元素排序后的索引 ind = np.unravel_index(np.argsort(x, axis=None), x.shape) print('多维数组拉伸为一维后排序的索引为:{}'.format(ind)) print('将多维数组拉伸为一维后进行排序:{}'.format(x[ind])) # 根据指定的键进行排序 x = np.array([(1, 0), (0, 1)], dtype=[('x', '<i4'), ('y', '<i4')]) print('原始数组为:') x # 沿着指定顺序进行排序 print('先对比x字段,再对比y字段:{}'.format(np.argsort(x, order=('x','y')))) print('先对比y字段,再对比x字段:{}'.format(np.argsort(x, order=('y','x'))))
一维数组的排序结果:[1 2 0]
被排序的数组为:
[[0 3]
[2 2]]
列方向的排序索引为:
[[0 1]
[1 0]]
列方向的排序结果为:
[[0 2]
[2 3]]
行方向的排序索引为:
[[0 1]
[0 1]]
行方向的排序结果为:
[[0 3]
[2 2]]
多维数组拉伸为一维后排序的索引为:(array([0, 1, 1, 0], dtype=int64), array([0, 0, 1, 1], dtype=int64))
将多维数组拉伸为一维后进行排序:[0 2 2 3]
原始数组为:
array([(1, 0), (0, 1)], dtype=[(‘x’, ‘<i4’), (‘y’, ‘<i4’)])
先对比x字段,再对比y字段:[1 0]
先对比y字段,再对比x字段:[0 1]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。