You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.6 KiB

2.2.5:排序和条件筛选

numpy中的快速排序

numpy中的排序相对 Python 的更加高效,默认情况下np.sort的排序算法是快速排序,也可以选择归并排序堆排序

类型 速度 最坏情况 工作空间 稳定性
快速排序 1 O(n^2) 0
归并排序 2 O(n*log(n)) ~n/2
堆排序 3 O(n*log(n)) 0
  • np.sort()函数返回排序后的数组副本,只能是升序
 a=np.array([5,9,1,15,3,10])

 np.sort(a) #升序排序
 '''
 输出array([ 1,  3,  5,  9, 10, 15])
 '''
  • np.argsort()函数返回排序后数组值从小到大的索引,可以通过这些索引值创建有序数组
a=np.array([4,5,9,1,3])

b=np.argsort(a) #对a使用argsort函数

print(b)
'''
输出array([3, 4, 0, 1, 2], dtype=int64)
第一个数是最小的值的索引,第二个数是第二小的值的索引,以此类推
'''

b1=[]
for i in b: #循环获取索引对应的值
    b1.append(a[i])
print(b1)
'''
输出:[1, 3, 4, 5, 9]
'''
  • 沿行或列进行排序,通过axis参数实现对数组的行、列进行排序,这种处理是将行或列当作独立的数组,任何行或列的值之间的关系将会丢失。
a=np.array([[8,1,5,9],[5,4,9,6],[7,1,5,3]])

np.sort(a,axis=1) #沿行排序
'''
输出array([[1, 5, 8, 9],
            [4, 5, 6, 9],
            [1, 3, 5, 7]])
'''

np.sort(a,axis=0) #沿列排序
'''
输出:array([[5, 1, 5, 3],
           [7, 1, 5, 6],
           [8, 4, 9, 9]])
'''
  • np.partition()函数为给定一个数,对数组进行分区,区间中的元素任意排序。
a=np.array([8,9,2,3,1,6,4])

np.partition(a,5) #比5小的在左边比5大的在右边
'''
输出:array([1, 3, 2, 4, 6, 8, 9])
'''

其他排序函数:

函数 描述
msort() 数组按第一个轴排序,返回排序后的数组副本
sort_complex() 对复数按先实部后虚部的顺序进行排序
argpartition() 通过关键字指定算法沿指定轴进行分区

where函数

  • np.where() 函数返回输入数组中满足给定条件的元素的索引,可以利用该函数进行 条件筛选
a=np.array([19,5,16,22,17])

np.where(a>15) #应用where函数
'''
输出:(array([0, 2, 3, 4], dtype=int64),)
'''

a[np.where(a>15)] #获取满足条件索引的元素

'''
输出:array([19, 16, 22, 17])
'''