Numpy的排序功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DataCastle/article/details/84936374

今天介绍的是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 一个字符串或列表,可以设置按照某个属性进行排序

例子如下:

import numpy as np

a = np.array([[1,5,4,8,4],
             [2,4,7,1,5],
             [1,0,3,4,2]])

np.sort(a)
#array([[1, 4, 4, 5, 8],
#       [1, 2, 4, 5, 7],
#       [0, 1, 2, 3, 4]])

np.sort(a,axis=1)
#array([[1, 4, 4, 5, 8],
#       [1, 2, 4, 5, 7],
#       [0, 1, 2, 3, 4]])
#可见与默认axis=-1的结果一致

np.sort(a,axis=0)
#array([[1, 0, 3, 1, 2],
#       [1, 4, 4, 4, 4],
#       [2, 5, 7, 8, 5]])

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

numpy.sort_complex()

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

a = np.array([[1,5,4,8,4],
             [2,4,7,1,5],
             [1,0,3,4,2]])

np.sort_complex(a)
#array([[ 1.+0.j,  4.+0.j,  4.+0.j,  5.+0.j,  8.+0.j],
#       [ 1.+0.j,  2.+0.j,  4.+0.j,  5.+0.j,  7.+0.j],
#       [ 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

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

 先看一下例子:

a = np.array([[1,5,4,8,4],
             [2,4,7,1,5],
             [1,0,3,4,2]])

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

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

numpy.lexsort()

 numpy.lexsort(keysaxis=-1)

 

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

例子如下:

a = np.array([[1,5,4,8,4],
             [2,4,7,1,5],
             [1,0,3,4,2]])

np.lexsort(a)
#array([1, 0, 4, 2, 3], dtype=int64)
#可以看到返回值为最后一行值得顺序索引

np.lexsort(([1,5,4,8,4],
            [2,4,7,4,5]))
#array([1, 0, 4, 2, 3], dtype=int64)
#返回第二个列表的顺序索引,如果有重复值,则对比相应索引在第一个列表中的值,值小则取该索引。

numpy.searchsorted()

官方文档的参数:

numpy.searchsortedavside ='left'sorter = None 

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

 例子如下:

np.searchsorted([1,2,3,4,5], 3)
#2

np.searchsorted([1,2,3,4,5], 3, side='right')
#3

np.searchsorted([1,2,3,4,5], [-10, 10, 2, 3])
#array([0, 5, 1, 2], dtype=int64)

np.searchsorted([5,2,4,3,1], 3, sorter=np.argsort([5,2,4,3,1]))
#2

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

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

猜你喜欢

转载自blog.csdn.net/DataCastle/article/details/84936374