当前位置:   article > 正文

numpy.argsort详解_numpy argsort

numpy argsort

numpy.argsort

  • 用例:
    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_arrayn维数组或整数将a沿着指定轴排序后其索引组成的数组。若a为一维数组,a[index_array]生成排序后的a数组。
更一般的,无论a为多少维数组,我们均可使用np.take_along_axis(a, index_array, axis=axis)生成排序后的a数组
  • 备注
    有关不同排序算法的说明,请参阅sort
    NumPy 1.4.0及以后的版本中,argsort可以对包含实数、复数、空值的数组进行排序。在sort中详细阐述了增强的排序算法。

  • 示例:

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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

一维数组的排序结果:[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]


github链接
https://github.com/wzy6642/numpy-translate

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/637627
推荐阅读
相关标签
  

闽ICP备14008679号