- numpy.sort(a, axis=-1, kind='quicksort', order=None):返回已排序新数组
参数说明: axis:可选参数,取值整数或None,若axis为None,数组先偏平化(降维),再排序;若axis=N,表示沿着数组的轴N排序,默认axis=-1,表示沿数组的最后一条轴排序
kind:排序算法,取值为quicksort、mergesort、heapsort分别表示快速排序、合并排序、堆排序,默认取值为quicksort
order:在结构化数组中,可以指定按某个字段排序
import numpy as np
#numpy.sort(a, axis=-1, kind='quicksort', order=None)
arr = np.array([[ 3, 2],[ 1, 6],[ 2, 1],[ 0, 9],[ 4, 8],[ 5, 7]])
np.sort(arr)#默认axis=-1
np.sort(arr,axis=-1)#等同np.sort(arr)
np.sort(arr,axis=0)#array([[0, 1],[1, 2],[2, 6],[3, 7],[4, 8],[5, 9]])
#理解多维数组按指定轴排序
arr1 = np.array([[[ 3, 2],[ 1, 6],[ 2, 1]],[[ 0, 9],[ 4, 8],[ 5, 7]]])
np.sort(arr1,axis=0)#array([[[0, 2],[1, 6],[2, 1]],[[3, 9],[4, 8],[5, 7]]])
np.sort(arr1,axis=1)#array([[[1, 1],[2, 2],[3, 6]],[[0, 7],[4, 8],[5, 9]]])
np.sort(arr1,axis=-1)#array([[[2, 3],[1, 6],[1, 2]],[[0, 9],[4, 8],[5, 7]]])
#order:结构化数组,指定某列进行排序
data = [(2,'c',85.4),(3,'java',90),(4,'php',88)]
arr2 = np.array(data,dtype =[('stno',int),('cname','S10'),('score',float)])
np.sort(arr2,order='score')
np.sort(arr2,order = ['stno','score'])#多列组合排序
#结论:numpy.sort排序后生产一个新数组
- numpy.ndarray.sort(axis=-1, kind='quicksort', order=None):用法同numpy.sort相同,区别只是该方法是在原数组就地排序
import numpy as np
#numpy.ndarray.sort(axis=-1, kind='quicksort', order=None)
arr = np.array([[ 3, 2],[ 1, 6],[ 2, 1],[ 0, 9],[ 4, 8],[ 5, 7]])
arr.sort(axis=0)#无返回值
arr#array([[0, 1],[1, 2],[2, 6],[3, 7],[4, 8],[5, 9]])
- numpy.argsort(a, axis=-1, kind='quicksort', order=None):间接排序,返回数组排序后元素对应的位置整数组成的索引数组(又称索引器)
#间接排序:根据一个或多个键对数据集进行排序,返回的不是已排好序数据本身,而是返回数据对应的位置索引
import numpy as np
#numpy.argsort(a, axis=-1, kind='quicksort', order=None):返回由整数组成的索引数组(索引器),索引值表示原数组元素所在位置
#一维数组应用
arr = np.array([5,0,1,3,2,4])
#利用numpy对象调用
np.argsort(arr)#array([1, 2, 4, 3, 5, 0], dtype=int64)已排序数据对应索引位置
arr[np.argsort(arr)]#array([0, 1, 2, 3, 4, 5])
#用数组实例调用
arr.argsort()#np.argsort(arr)
arr[arr.argsort()]
#多维数组应用
arr1 = np.array([[ 3, 2],[ 1, 6],[ 2, 1],[ 0, 9],[ 4, 8],[ 5, 7]])
arr1[:,0].argsort()
arr1[arr1[:,0].argsort(),:]#按第一列顺序排序
arr1[0].argsort()
arr1[:,arr1[0].argsort()]#按第一行顺序排序
#order参数使用
data = [(2,'c',85.4),(3,'java',90),(5,'php',88),(4,'php',88)]
arr2 = np.array(data,dtype = [('stno',int),('cname','S10'),('score',float)])
arr2.argsort(order='score')
arr2.argsort(order=['score','stno'])#先按score排序,在按stno排序
arr2[arr2.argsort(order=['score','stno'])]#获取排序后数据
- numpy.lexsort(keys, axis=-1):和numpy.argsort类似,可以对对个键数组执行间接排序
import numpy as np
#numpy.lexsort(keys, axis=-1)
data = [(2,'c',85.4),(3,'java',90),(5,'php',88),(4,'php',88)]
arr2 = np.array(data,dtype = [('stno',int),('cname','S10'),('score',float)])
idx = np.lexsort([arr2['stno'],arr2['score']])#先按score排序,再按stno排序
arr2[idx]
#结论:键的应用顺序是从keys序列中最后一个传入的算起
- sorted(iterable, key=None, reverse=False):python内置的全局函数,返回一个已排序的新列表,key:自定义函数,指定排序方式
import numpy as np
#sorted(iterable, key=None, reverse=False)
data = [(2,'c',85.4),(3,'java',90),(5,'php',88),(4,'php',88)]
arr2 = np.array(data,dtype = [('stno',int),('cname','S10'),('score',float)])
arr2
sorted(arr2,key = lambda x :x['score'])#生成列表[(2, b'c', 85.4), (5, b'php', 88.0), (4, b'php', 88.0), (3, b'java', 90.0)]
sorted(arr2,key = lambda x :x['score'],reverse=True)#逆序输出
import operator as op
sorted(arr2,key = op.itemgetter(2))#若果多个元素具有相同的key,则排序前后他们的顺序不变[(2, b'c', 85.4), (5, b'php', 88.0), (4, b'php', 88.0), (3, b'java', 90.0)]
sorted(arr2,key = op.itemgetter(0,2))#先按stno排序,再按score排
sorted(sorted(arr2,key = op.itemgetter(0)),key =op.itemgetter(2))#等同sorted(arr2,key = op.itemgetter(2,0))注意嵌套时,排序顺序