种类 | 速度 | 最坏情况 | 工作空间 | 稳定性 |
---|---|---|---|---|
'quicksort' (快速排序) |
1 | O(n^2) |
0 | 否 |
'mergesort' (归并排序) |
2 | O(n*log(n)) |
~n/2 | 是 |
'heapsort' (堆排序) |
3 | O(n*log(n)) |
0 | 否 |
numpy.sort(a, axis, kind, order) 函数返回输入数组的排序副本。
- a: 要排序的数组
- axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序, axis=0 按列排序,axis=1 按行排序
- kind: 默认为’quicksort’(快速排序)
- order: 如果数组包含字段,则是要排序的字段
numpy.argsort(a, axis=-1, kind=None, order=None) 返回的是数组值从小到大的索引值
argsort过程,第一步先sort得到由小到大的数组(一维不指定轴,高维需要指定轴),排序后的数组中的值在原数组中对应的索引就是此函数的返回值
numpy.lexsort() 用于对多个序列进行排序。
例:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。
函数 | 描述 |
---|---|
msort(a) | 数组按第一个轴排序,返回排序后的数组副本。np.msort(a) 相等于 np.sort(a, axis=0)。 |
sort_complex(a) | 对复数按照先实部后虚部的顺序进行排序。 |
partition(a, kth[, axis, kind, order]) | 指定一个数,对数组进行分区,返回数组 |
argpartition(a, kth[, axis, kind, order]) | 可以通过关键字 kind 指定算法沿着指定轴对数组进行分区,返回数组索引 |
import numpy as np a = np.random.randint(1, 10, size=9).reshape(3, 3) print(a) b = np.msort(a) # 按第一个轴排序,即0轴 print(b) # 随机生成5个复数 c = np.random.randint(1, 10, size=5) + 1j * np.random.randint(1, 10, size=5) print(c) d = np.sort_complex(c) # 先实后虚排序排序 print(d) e = np.random.randint(1,100,size=9) print(e) f=np.partition(e,3) # 切分数组e,将数组分为两部分,3 表示的是排序数组索引为 3 的数字,比该数字小的排在该数字前面,比该数字大的排在该数字的后面,不保证分区有序 print(f) g=np.argpartition(e,3) # 切分数组e,将数组分为两部分,3 表示的是排序数组索引为 3 的数字,比该数字小的排在该数字前面,比该数字大的排在该数字的后面,并返回排序数组索引 print(g) [[6 1 2] [1 6 3] [1 9 8]] [[1 1 2] [1 6 3] [6 9 8]] [9.+6.j 5.+9.j 5.+9.j 2.+1.j 7.+8.j] [2.+1.j 5.+9.j 5.+9.j 7.+8.j 9.+6.j] [56 49 44 41 41 37 67 10 78] [10 37 41 41 49 44 56 67 78] [7 5 3 4 1 2 0 6 8]
numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。
numpy.nonzero() 函数返回输入数组中非零元素的索引。
numpy.where() 函数返回输入数组中满足给定条件的元素的索引。
numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素。
import numpy as np a = np.random.randint(0, 10, size=(3, 3)) print(a) print(np.argmax(a, axis=0)) # 研究每一列的最大值 print(np.argmin(a, axis=1)) # 研究每一行的最小值 print(np.nonzero(a)) # 返回非零元素的索引 print(np.where(a > 5)) # 返回满足条件的元素的索引 print(np.extract(np.mod(a,2)==0, a)) # 返回满足条件的元素的值 [[4 1 5] [8 0 3] [6 4 6]] [1 2 2] [1 1 1] (array([0, 0, 0, 1, 1, 2, 2, 2], dtype=int64), array([0, 1, 2, 0, 2, 0, 1, 2], dtype=int64)) (array([1, 2, 2], dtype=int64), array([0, 0, 2], dtype=int64)) [4 8 0 6 4 6]
最新评论