当前位置:   article > 正文

Numpy的排序功能_numpy 排序

numpy 排序

今天介绍的是numpy中排序的一些函数,如下所示:

  • numpy.sort(ndarray.sort与之类似)
  • numpy.sort_complex
  • numpy.argsort
  • numpy.lexsort
  • numpy.searchsorted

numpy.sort()

看一下官方文档给出的参数:

np.sort(a, axis=-1, kind='quicksort', order=None)

参数含义如下:

参数含义
a排序的数组
axis排序的方向,None表示展开来排序,默认值为-1,表示沿最后的轴排序,可选有0、1
kind排序的算法,包含快排'quicksort'、混排'mergesort'、堆排'heapsort', 默认为‘quicksort'
order一个字符串或列表,可以设置按照某个属性进行排序

例子如下:

  1. import numpy as np
  2. a = np.array([[1,5,4,8,4],
  3. [2,4,7,1,5],
  4. [1,0,3,4,2]])
  5. np.sort(a)
  6. #array([[1, 4, 4, 5, 8],
  7. # [1, 2, 4, 5, 7],
  8. # [0, 1, 2, 3, 4]])
  9. np.sort(a,axis=1)
  10. #array([[1, 4, 4, 5, 8],
  11. # [1, 2, 4, 5, 7],
  12. # [0, 1, 2, 3, 4]])
  13. #可见与默认axis=-1的结果一致
  14. np.sort(a,axis=0)
  15. #array([[1, 0, 3, 1, 2],
  16. # [1, 4, 4, 4, 4],
  17. # [2, 5, 7, 8, 5]])

kind参数关于排序的算法,感兴趣的话可以自行百度-_-..

numpy.sort_complex()

这个函数比较简单,是对复数排序,例子如下:

  1. a = np.array([[1,5,4,8,4],
  2. [2,4,7,1,5],
  3. [1,0,3,4,2]])
  4. np.sort_complex(a)
  5. #array([[ 1.+0.j, 4.+0.j, 4.+0.j, 5.+0.j, 8.+0.j],
  6. # [ 1.+0.j, 2.+0.j, 4.+0.j, 5.+0.j, 7.+0.j],
  7. # [ 0.+0.j, 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j]])

numpy.argsort()

官方文档给出的参数:

np.argsort(a, axis=-1, kind='quicksort', order=None) 

参数含义
a排序的数组
axis排序的方向,None表示展开来排序,默认值为-1,表示沿最后的轴排序,可选有0、1
kind排序的算法,包含快排'quicksort'、混排'mergesort'、堆排'heapsort', 默认为‘quicksort'
order

一个字符串或列表,可以设置按照某个属性进行排序

 

 先看一下例子:

  1. a = np.array([[1,5,4,8,4],
  2. [2,4,7,1,5],
  3. [1,0,3,4,2]])
  4. np.argsort(a)
  5. #array([[0, 2, 4, 1, 3],
  6. # [3, 0, 1, 4, 2],
  7. # [1, 0, 4, 2, 3]], dtype=int64)

可以看到与np.sort函数功能一致,不过返回的是索引而不是值。

numpy.lexsort()

 numpy.lexsort(keysaxis=-1)

 

参数含义
keys排序的参照物包括数组或包含N维的的元组,默认值为最后一行,(如果为二维数组则指最后一列)
axis排序的方向,None表示展开来排序,默认值为-1,表示沿最后的轴排序,可选有0、1

例子如下:

  1. a = np.array([[1,5,4,8,4],
  2. [2,4,7,1,5],
  3. [1,0,3,4,2]])
  4. np.lexsort(a)
  5. #array([1, 0, 4, 2, 3], dtype=int64)
  6. #可以看到返回值为最后一行值得顺序索引
  7. np.lexsort(([1,5,4,8,4],
  8. [2,4,7,4,5]))
  9. #array([1, 0, 4, 2, 3], dtype=int64)
  10. #返回第二个列表的顺序索引,如果有重复值,则对比相应索引在第一个列表中的值,值小则取该索引。

numpy.searchsorted()

官方文档的参数:

numpy.searchsortedavside ='left'sorter = None 

 

参数含义
a输入数组。如果sorter为None,则必须按升序排序,否则sorter必须是对其进行排序的索引数组。
v值或者数组
side如果是'left',则给出找到的第一个合适位置的索引。如果'right',则返回合适位置的后一个索引。如果没有合适的索引,返回0或N(其中N是的长度)。
sorter可选的整数索引数组,用于按升序对数组a进行排序。它们通常是argsort的结果。

 例子如下:

  1. np.searchsorted([1,2,3,4,5], 3)
  2. #2
  3. np.searchsorted([1,2,3,4,5], 3, side='right')
  4. #3
  5. np.searchsorted([1,2,3,4,5], [-10, 10, 2, 3])
  6. #array([0, 5, 1, 2], dtype=int64)
  7. np.searchsorted([5,2,4,3,1], 3, sorter=np.argsort([5,2,4,3,1]))
  8. #2

需要注意的是参数a要求是有序的数组,如果不是需要使用sorter参数。

numpy排序函数差不多就是这些了,还有两个numpy.partitionnumpy.argpartition也是和排序相关的,不过不常用,感兴趣的话可以自行了解 :)

 

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

闽ICP备14008679号