赞
踩
- >>import numpy as np
- >>x=np.array([[0,12,48],[4,14,18],[1,7,99]])
- #灵活应用索引和切片实现按索引的排序
-
- #倒序的实现(普通列表也可用reverse实现,numpy则没有这个方法)
- >>x[::-1]
- array([[ 1, 7, 99],
- [ 4, 14, 18],
- [ 0, 12, 48]])
-
- #指定顺序的实现(传入用于指定顺序的整数列表或ndarray即可)
- >>x[[2,0,1]]
- array([[ 1, 7, 99],
- [ 0, 12, 48],
- [ 4, 14, 18]])
-
- >>x[[2,0,1],[0,2,1]] #只是截取部分元素,并不符合排序要求
- array([ 1, 48, 14])
-
- >>x[[2,0,1]][:,[0,2,1]]
- array([[ 1, 99, 7],
- [ 0, 48, 12],
- [ 4, 18, 14]])
-
- >>x[np.ix_([2,0,1],[0,2,1])] #np.ix_函数将两个一维数组转化为用于选取方形区域的索引器
- array([[ 1, 99, 7],
- [ 0, 48, 12],
- [ 4, 18, 14]])
-
ndarray.sort(axis=-1, kind='quicksort', order=None)
或者:ndarray.sort(axis=-1, kind='quicksort', order=None)
参数 | 描述 |
---|---|
axis | 排序沿数组的(轴)方向,0表示按行,1表示按列,None表示展开来排序,默认值为-1,表示沿最后的轴排序 |
kind | 排序的算法,提供了快排'quicksort'、混排'mergesort'、堆排'heapsort', 默认为‘quicksort' |
order | 排序的字段名,可指定字段排序,默认为None |
- >>import numpy as np
- >>x=np.array([[0,12,48],[4,18,14],[7,1,99]])
- >>np.sort(x)
- array([[ 0, 12, 48],
- [ 4, 14, 18],
- [ 1, 7, 99]])
-
- >>np.sort(x,axis=1)
- array([[ 0, 12, 48],
- [ 4, 14, 18],
- [ 1, 7, 99]])
-
- >>x.sort()
- array([[ 0, 12, 48],
- [ 4, 14, 18],
- [ 1, 7, 99]])
-
- >>dt = np.dtype([('name', 'S10'),('age', int)])
- >>a = np.array([("Mike",21),("Nancy",25),("Bob", 17), ("Jane",27)], dtype = dt)
- >>np.sort(a, order = 'name')
- array([(b'Bob', 17), (b'Jane', 27), (b'Mike', 21), (b'Nancy', 25)],
- dtype=[('name', 'S10'), ('age', '<i4')])
-
- >>np.sort(a, order = 'age')
- array([(b'Bob', 17), (b'Mike', 21), (b'Nancy', 25), (b'Jane', 27)],
- dtype=[('name', 'S10'), ('age', '<i4')])
numpy.argsort(a, axis=-1, kind='quicksort', order=None)
对数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组。 这个索引数组用于构造排序后的数组。
参数类似于sort(),不作说明
- >>import numpy as np
- >>> x = np.array([3, 1, 2])
- >>> a=np.argsort(x)
- >>a #升序
- #argsort函数返回的是数组值从小到大的索引值,[3, 1, 2]从小到大为[1,2,3],期对应的索引为[1,2,0]
- array([1, 2, 0])
-
- >>np.argsort(-x) #降序
- array([0, 2, 1], dtype=int64)
-
- >>x[a] #以排序后的顺序重构原数组
- array([1, 2, 3])
-
- #二维数组
- >>x=np.array([[0,12,48],[4,18,14],[7,1,99]])
- >>a1=np.argsort(x)
- >>a1
- array([[0, 1, 2],
- [0, 2, 1],
- [1, 0, 2]], dtype=int64)
- #以排序后的顺序重构原数组,注意与一维数组的形式不一样
- >>np.array([np.take(x[i],x[i].argsort())for i in range(3)])
- array([[ 0, 12, 48],
- [ 4, 14, 18],
- [ 1, 7, 99]])
-
- >>x[x[:,2].argsort()] #按照第三列对行进行排序
- array([[ 4, 18, 14],
- [ 0, 12, 48],
- [ 7, 1, 99]])
-
- >>x.T[x.T[:,2].argsort()].T #按照第三行对列进行排序
- array([[12, 0, 48],
- [18, 4, 14],
- [ 1, 7, 99]])
-
- >>x[:,x[2].argsort()] #还可以这样写
- array([[12, 0, 48],
- [18, 4, 14],
- [ 1, 7, 99]])
-
lexsort(keys, axis=-1)
lexsort()根据键值的字典序进行排序,支持对数组按指定行或列的顺序排序,间接排序,不修改原数组,返回索引。一般对一维数组使用argsort()。
默认按最后一行元素有小到大排序, 返回最后一行元素排序后索引所在位置。
参数 | 描述 |
---|---|
'axis' | 数组排序时的基准,axis=0,按行排列;axis=1,按列排列 |
'keys' | 排序的参照物包括数组或包含N维的的元组,默认值为最后一行,(如果为二维数组则指最后一列) |
- >>import numpy as np
- >>x=np.array([[0,12,48],[4,18,14],[7,1,99]])
- >>np.lexsort(x)
- array([1, 0, 2], dtype=int64) #返回索引值
-
- >>a=np.array([1,5,1,4,3,4,4])
- >>b=np.array([9,4,0,4,0,2,1])
- >>> ind=np.lexsort((b,a))
- >>ind #将长度相同的a,b组合,再根据a值的大小进行排序,再考虑b值
- array([2, 0, 4, 6, 5, 3, 1], dtype=int64)
-
- >>list(zip(a[ind],b[ind]))
- [(1, 0), (1, 9), (3, 0), (4, 1), (4, 2), (4, 4), (5, 4)]
-
- >>> c=[[1,5,1,4,3,4,4],[9,4,0,4,0,2,1]]
- >>> np.lexsort(c) # 此种情况与先b后a的情况一致
- array([2, 4, 6, 5, 3, 1, 0], dtype=int64)
-
- #其他方法
- #按最后一列顺序排序
- >>x[np.lexsort(x.T)]
- array([[ 4, 18, 14],
- [ 0, 12, 48],
- [ 7, 1, 99]])
-
- #按最后一列逆序排序
- >>x[np.lexsort(-x.T)]
- array([[ 7, 1, 99],
- [ 0, 12, 48],
- [ 4, 18, 14]])
-
- #按第一列顺序排序
- >>x[np.lexsort(x[:,::-1].T)]
- array([[ 0, 12, 48],
- [ 4, 18, 14],
- [ 7, 1, 99]])
-
- #按最后一行顺序排序
- >>x.T[np.lexsort(x)].T
- array([[12, 0, 48],
- [18, 4, 14],
- [ 1, 7, 99]])
-
- #按第一行顺序排序
- >>x.T[np.lexsort(x[::-1,:])].T
- array([[ 0, 12, 48],
- [ 4, 18, 14],
- [ 7, 1, 99]])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。