当前位置:   article > 正文

numpy数组排序函数介绍_numpy函数sort的order

numpy函数sort的order

本文参考自菜鸟教程,另有需求的朋友可自行查询!

numpy.sort()

函数格式如下:

numpy.sort(a, axis, kind, order)
  • 1

参数说明:

  • a:要排序的数组对象
  • axis:排序的轴,axis=0按列排序,axis=1按行排序。如果没有数组会被展开,沿着最后的轴排序。
  • kind:排序的方法,如’quicksort’(快速排序,不稳定)、‘mergesort’(归并排序,稳定)、‘heapsort’(堆排序,不稳定)等,默认为快排。
  • order:如果数组包含字段,则是要排序的字段

实例:

import numpy as np  
a = np.array([[2,5],[8,1]])  
print ('我们的数组是:')
print (a)
print ('调用 sort() 函数:')
print (np.sort(a))
print ('按列排序:')
print (np.sort(a, axis =  0))
# 在 sort 函数中排序字段 
dt = np.dtype([('name',  'S10'),('age',  int)]) #s10代表长度为10的字符串
a = np.array([("b",21),("a",25),("d",  17),  ("c",27)], dtype = dt)  
print ('我们的数组是:')
print (a)
print ('按 name 排序:')
print (np.sort(a, order =  'name'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

结果如下:

我们的数组是:
[[2 5]
 [8 1]]
调用 sort() 函数:
[[2 5]
 [1 8]]
按列排序:
[[2 1]
 [8 5]]
我们的数组是:
[(b'b', 21) (b'a', 25) (b'd', 17) (b'c', 27)]
按 name 排序:
[(b'a', 25) (b'b', 21) (b'c', 27) (b'd', 17)]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

numpy.argsort()

numpy.argsort() 函数返回的是数组值从小到大的索引值。
实例:

import numpy as np
x=np.array([4,2,3,1])
print('数组为:\n{}'.format(x))
y=x.argsort()
print('从小到大排序后的索引值为:\n{}'.format(y))
print('以排序后的顺序重构原数组:\n{}'.format(x[y]))
print ('使用循环重构原数组:')
for i in y:
    print(x[i], end=" ")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果如下:

数组为:
[4 2 3 1]
从小到大排序后的索引值为:
[3 1 2 0]
以排序后的顺序重构原数组:
[1 2 3 4]
使用循环重构原数组:
1 2 3 4 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

numpy.lexsort()

numpy.lexsort() 用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。
这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。
实例:

import numpy as np
math=np.array([87,90,65,70])
total=np.array([340,250,540,400])
test=np.lexsort((math,total))  #排序后存储的为索引值
print ('调用 lexsort() 函数:\n{}'.format(test))
print ('使用这个索引来获取排序后的数据:')
print(np.array([[math[i],total[i]] for i in test])) #便于理解,转换成二维数组
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果如下:

调用 lexsort() 函数:
[1 0 3 2]
使用这个索引来获取排序后的数据:
[[ 90 250]
 [ 87 340]
 [ 70 400]
 [ 65 540]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/648902
推荐阅读
相关标签
  

闽ICP备14008679号