Educoder python NumPy数组的高级操作 第3关:花式索引与布尔索引

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

  • 任务描述
  • 相关知识
    • 花式索引
    • 布尔索引
  • 编程要求
  • 测试说明

任务描述

本关任务:根据本关所学知识,过滤大写字母。

相关知识

为了完成本关任务,你需要掌握:

  • 花式索引;

  • 布尔索引。

花式索引

花式索引(Fancy Indexing)是NumPy用来描述使用整型数组(这里的数组,可以是NumPy的数组,也可以是python自带的list)作为索引的术语,其意义是根据索引数组的值作为目标数组的某个轴的下标来取值。

使用一维整型数组作为索引,如果被索引数组(ndarray)是一维数组,那么索引的结果就是对应位置的元素;如果被索引数组(ndarray)是二维数组,那么就是对应下标的行。如下图所示:

Educoder python NumPy数组的高级操作 第3关:花式索引与布尔索引_第1张图片

示例代码如下:

 
  1. import numpy as np
  2.  
  3. arr = np.array(['zero','one','two','three','four'])
  4.  
  5. '''
  6. 打印arr中索引为1和4的元素
  7. 结果为:['one', 'four']
  8. '''
  9. print(arr[[1,4]])
  10.  
  11. arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
  12.  
  13. '''
  14. 打印arr中索引为1和0的行
  15. 结果为:[[4, 5, 6],
  16. [1, 2, 3]]
  17. '''
  18. print(arr[[1, 0]])
  19.  
  20. '''
  21. 打印arr中第2行第1列与第3行第2列的元素
  22. 结果为:[4, 8]
  23. '''
  24. print(arr[[1, 2], [0, 1]])

布尔索引

我们可以通过一个布尔数组来索引目标数组,以此找出与布尔数组中值为True的对应的目标数组中的数据,从而达到筛选出想要的数据的功能。如下图所示:(PS:需要注意的是,布尔数组的长度必须与被索引数组对应的轴的长度一致

Educoder python NumPy数组的高级操作 第3关:花式索引与布尔索引_第2张图片

不过单纯的传入布尔数组进去有点蠢,有没有更加优雅的方式使用布尔索引来达到筛选数据的效果呢?

当然有!我们可以想办法根据我们的需求,构造出布尔数组,然后再通过布尔索引来实现筛选数据的功能。

假设有公司员工绩效指数的数据如下(用一个一维的ndarray表示),现在想要把绩效指数大于3.5的筛选出来进行股权激励。

那首先就要构造出布尔数组,构造布尔数组很简单,performance > 3.5即可。此时会生成想要的布尔数组。

有了布尔数组就可以使用布尔索引来实现筛选数据的功能了。

Educoder python NumPy数组的高级操作 第3关:花式索引与布尔索引_第3张图片

示例代码如下:

 
  1. import numpy as np
  2.  
  3. performance = np.array([3.25, 3.5, 3.75, 3.5, 3.25, 3.75])
  4.  
  5. '''
  6. 筛选出绩效高于3.5的数据
  7. 结果为:[3.75, 3.75]
  8. '''
  9. print(performance[performance > 3.5])
  10.  
  11. '''
  12. 筛选出绩效高于3.25并且低于4的数据
  13. 注意:&表示并且的意思,可以看成是and。&左右两边必须加上()
  14. 结果为:[3.5 3.75 3.5 3.75]
  15. '''
  16. print(performance[(performance > 3.25) & (performance < 4)])

编程要求

请在右侧编辑器Begin-End处补充代码,根据函数参数input_data过滤出所有的大写字母。

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

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

测试说明

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

测试输入:

["d","a","A","p","b","I","C","K"]

预期输出:

['A' 'I' 'C' 'K']


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

import numpy as np
def student(input_data):
    result=[]
    #********* Begin *********#
    d=np.array(input_data)
    result=d[(d>='A')&(d<='Z')]
    # ********* End *********#
    return result

 

你可能感兴趣的:(Educoder编程题答案解析)