Educoder python NumPy数组的高级操作 第2关:比较、掩码和布尔逻辑

题目链接:https://www.educoder.net/tasks/yosmq4xlrjn8 


任务描述

本关任务:编写一个能比较并筛选数据的程序。

相关知识

为了完成本关任务,你需要掌握:1. 如何对numpy进行比较运算;2. 如何使用逻辑数组。

比较

在许多情况下,数据集可能不完整或因无效数据的存在而受到污染。我们要基于某些准则来抽取、修改、计数或对一个数组中的值进行其他操作时,就需要掩码了。接下来将学习如何用 布尔掩码 来查看和操作数组中的值。

和算术运算符一样,比较运算符在numpy中也是通过通用函数来实现的。比较运算符和其对应的通用函数如下:

比较运算符 通用函数
== np.equal
!= np.not_equal
< np.less
<= np.less_equal
> np.greater
>= np.greater_equal

这些比较运算符通用函数可以用于任意形状、大小的数组。示例如下:


 
  1. data=np.array([('Alice', 4, 40),('Bob', 11, 85.5),('Cathy', 7, 68.0),('Doug', 9, 60)],dtype=[("name","S10"),("age","int"),("score","float")]) #构造结构化数组
  2.  
  3.  
  4. print(data["age"]<10)
  5. '''
  6. 输出:array([ True, False, True, True])
  7. '''
  8.  
  9. print(data["score"]>60)
  10. '''
  11. 输出:array([False, True, True, False])
  12. '''
  13.  
  14. print(data["score"]>=60)
  15. '''
  16. 输出:array([False, True, True, True])
  17. '''
  18.  
  19. print(data["score"]<=60)
  20. '''
  21. 输出:array([ True, False, False, True])
  22. '''
  23.  
  24. print(data["age"]!=9)
  25. '''
  26. 输出:array([ True, True, True, False])
  27. '''
  28.  
  29. print((data["age"]/2)==(np.sqrt(data["age"])))
  30. '''
  31. 输出:array([ True, False, False, False])
  32. '''

布尔数组作掩码

一种更加强大的模式是使用布尔数组作为掩码,通过该掩码选择数据的子数据集,实现一些操作:


 
  1. data=np.array([('Alice', 4, 40), ('Bob', 11, 85.5) ,('Cathy', 7, 68.0),('Doug', 9, 60)],dtype=[("name","S10"),("age","int"),("score","float")])
  2.  
  3. print(data)
  4. '''
  5. 输出:[(b'Alice', 4, 40. )
  6. (b'Bob', 11, 85.5)
  7. (b'Cathy', 7, 68. )
  8. (b'Doug', 9, 60. )]
  9. '''
  10.  
  11.  
  12. print(data["score"]>60) #使用比较运算得的一个布尔数组
  13. '''
  14. 输出:[False True True False]
  15. '''
  16.  
  17. print(data[data["score"]>60]) #进行简单的索引,即掩码操作将值为True的选出
  18. '''
  19. 输出:[(b'Bob', 11, 85.5) (b'Cathy', 7, 68. )]
  20. '''

布尔逻辑

结合Python的逐位逻辑运算符一起使用。逻辑运算符对应numpy中的通用函数如下表:

逻辑运算符 通用函数
& np.bitwise_and
| np.bitwise_or
^ np.bitwise_xor
~ np.bitwise_not

 
  1. print(np.count_nonzero(data["age"]<10))#统计数组中True的个数
  2. '''
  3. 输出:3
  4. '''
  5.  
  6. #还可以用np.sum(),输出结果和count_nonzero一样,sum()的好处是可以沿着行或列进行求和
  7. print(np.sum(data["age"]<10))
  8.  
  9. print(np.any(data["score"]<60))#是否有不及格的
  10. '''
  11. 输出:True
  12. '''
  13.  
  14. print(np.all(data["age"]>10))#是否都大于10岁
  15. '''
  16. 输出:False
  17. '''
  18.  
  19. print(data[data["age"]>10])#打印年龄大于10的信息
  20. '''
  21. 输出:array([(b'Bob', 11, 85.5)],
  22. dtype=[('name', 'S10'), ('age', '<i4'), ('score', '<f8')])
  23. '''

编程要求

请在右侧编辑器Begin-End处补充代码,根据输入的数据筛选出大于num的值。

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

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

测试说明

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

测试输入:

[[ 3 ,15, 9 ,11 , 7],[ 2, 0 , 8, 19 ,16],[ 6 , 6, 16 , 9, 5],[ 7 , 5 , 2 , 6 ,13]] 10

预期输出:

[15 11 19 16 16 13]


开始你的任务吧,祝你成功!

import numpy as np
def student(num,input_data):
    result=[]
    # ********* Begin *********#
    input_data=np.array(input_data)
    result=input_data[input_data>num]
    # ********* End *********#
    return result

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值