今天介绍的是numpy中排序的一些函数,如下所示:
- numpy.sort(ndarray.sort与之类似)
- numpy.sort_complex
- numpy.argsort
- numpy.lexsort
- numpy.searchsorted
看一下官方文档给出的参数:
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参数关于排序的算法,感兴趣的话可以自行百度-_-..
这个函数比较简单,是对复数排序,例子如下:
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]])
官方文档给出的参数:
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
(keys, axis=-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
(a,v,side ='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.partition和numpy.argpartition也是和排序相关的,不过不常用,感兴趣的话可以自行了解 :)