种类 速度 最坏情况 工作空间 稳定性
'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]