任务描述
本关任务:给定一个二维数组,请以整数数组索引、布尔索引、花式索引三种方式,来获取我们需要的数组元素。
相关知识
NumPy 比一般的 Python 序列提供更多的索引方式。除了基本的用整数和切片的索引外,数组还有整数数组索引、布尔索引及花式索引。
整数数组索引
以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。
In : x = np.arange(12).reshape((4,3))
In : y = x[[0, 1, 2],[0, 1, 0]]
In : y
Out: array([0, 4, 6])
布尔索引
以下实例获取数组中大于7的元素。
In : x = np.arange(12).reshape((4,3))
In : y = x[x > 7]
In : y
Out: array([8, 9, 10, 11])
花式索引
花式索引指的是利用整数数组进行索引。
花式索引根据索引数组的值,作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行。
花式索引跟切片不一样,它总是将数据复制到新数组中。
传入单个索引数组
以下实例获取数组的第5、1、2、3行。
In : x = np.arange(15).reshape((5,3))
In : y = x[[4, 0, 1, 2]]
In : y
Out: array([12, 13, 14]
[0, 1, 2]
[3, 4, 5]
[6, 7, 8])
传入多个索引数组
传入多个索引数组,则需要和numpy.ix_同时使用。
numpy.ix_:传入两个参数,第一个参数为数组索引,第二个参数为排列顺序。
In : x = np.arange(12).reshape((4,3))
In : y = x[np.ix_([1, 2],[2, 1, 0])]
In : y
Out: array([5, 4, 3]
[8, 7, 6])
编程要求
首先,利用花式索引获取arr数组第line行(至少两行)的数组a;然后,利用整数数组索引获取数组四个角(按行优先的顺序获取)的元素得到数组b;最后,再利用布尔索引获取大于10的元素得到数组c,并输出c。
请按照编程要求,补全右侧编辑器Begin-End 区间的代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:1,2,3,4
预期输出:
[16 19]
import numpy as np
'''
arr为一个ndarray类型的数组,line为花式索引的索引数组
'''
def advanced_index(arr,line):
# ********** Begin *********** #
a = arr[line]
b = a[np.ix_([0,-1],[0,-1])]#若没有np.ix,则会被认为成整数数组索引,得到(0,0)(-1,-1)
#numpy.ix_:传入两个参数,第一个参数为数组索引,第二个参数为排列顺序。
#意思是先要求选取行,再按顺序按列排序
#得到(0,0)(0,-1)(-1,0)(-1,-1),也就是四个角的坐标
c = b[b>10]
# *********** End ************ #
return c
def main():
line = list(map(lambda x:int(x),input().split(",")))
arr = np.arange(24).reshape(6, 4)
print(advanced_index(arr,line))
if __name__ == '__main__':
main()