第6关:Numpy的排序和条件筛选

任务描述

本关任务:掌握numpy的排序方法,并编写一个能筛选并排序的程序。

相关知识

说到排序想必你的脑海中会想到快速排序、插入排序、冒泡排序、选择排序等复杂的排序算法,所有的这些算法都是为了实现一个任务 —— 排序

庆幸的是在Python中已经封装了排序的函数,不需要我们再去造轮子了。

numpy中的快速排序

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

类型速度最坏情况工作空间稳定性
快速排序1O(n^2)0
归并排序2O(n*log(n))~n/2
堆排序3O(n*log(n))0
  • np.sort()函数返回排序后的数组副本,只能是升序
  1. a=np.array([5,9,1,15,3,10])
  2. np.sort(a) #升序排序
  3. '''
  4. 输出:array([ 1, 3, 5, 9, 10, 15])
  5. '''
  • np.argsort()函数返回排序后数组值从小到大的索引,可以通过这些索引值创建有序数组
  1. a=np.array([4,5,9,1,3])
  2. b=np.argsort(a) #对a使用argsort函数
  3. print(b)
  4. '''
  5. 输出:array([3, 4, 0, 1, 2], dtype=int64)
  6. 第一个数是最小的值的索引,第二个数是第二小的值的索引,以此类推
  7. '''
  8. b1=[]
  9. for i in b: #循环获取索引对应的值
  10. b1.append(a[i])
  11. print(b1)
  12. '''
  13. 输出:[1, 3, 4, 5, 9]
  14. '''
  • 沿行或列进行排序,通过axis参数实现对数组的行、列进行排序,这种处理是将行或列当作独立的数组,任何行或列的值之间的关系将会丢失。
  1. a=np.array([[8,1,5,9],[5,4,9,6],[7,1,5,3]])
  2. np.sort(a,axis=1) #沿行排序
  3. '''
  4. 输出:array([[1, 5, 8, 9],
  5. [4, 5, 6, 9],
  6. [1, 3, 5, 7]])
  7. '''
  8. np.sort(a,axis=0) #沿列排序
  9. '''
  10. 输出:array([[5, 1, 5, 3],
  11. [7, 1, 5, 6],
  12. [8, 4, 9, 9]])
  13. '''
  • np.partition()函数为给定一个数,对数组进行分区,区间中的元素任意排序。
  1. a=np.array([8,9,2,3,1,6,4])
  2. np.partition(a,5) #比5小的在左边,比5大的在右边
  3. '''
  4. 输出:array([1, 3, 2, 4, 6, 8, 9])
  5. '''

其他排序函数:

函数描述
msort()数组按第一个轴排序,返回排序后的数组副本
sort_complex()对复数按先实部后虚部的顺序进行排序
argpartition()通过关键字指定算法沿指定轴进行分区
where函数
  • np.where() 函数返回输入数组中满足给定条件的元素的索引,可以利用该函数进行 条件筛选
  1. a=np.array([19,5,16,22,17])
  2. np.where(a>15) #应用where函数
  3. '''
  4. 输出:(array([0, 2, 3, 4], dtype=int64),)
  5. '''
  6. a[np.where(a>15)] #获取满足条件索引的元素
  7. '''
  8. 输出:array([19, 16, 22, 17])
  9. '''

编程要求

请在右侧编辑器Begin-End处补充代码,先过滤数组中大于num的值,再对这些值进行排序。

  • 具体要求请参见后续测试样例。

请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!

测试说明

平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。

测试输入:

[[55, 110, 20, 1, 34, 0, 69],[9,21,33,68,16,71,80]]

66

预期输出:

[ 68 69 71 80 110]

代码: 

import numpy as np
def studen(input_data,num):
    '''
    将ipnut_data转换成ndarray后筛选出大于num的元素组成新的ndarray并排序
    :param input_data: 测试用例,类型为list
    :param num: 测试用例,类型为int
    :return: result,类型为ndarray
    '''
    result=[]
    #********* Begin *********#
    data=np.array(input_data)
    data=data[data>num]
    result=np.sort(data)
    #********* End *********#
    return  result

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值