第2关:Numpy高级索引

任务描述
本关任务:给定一个二维数组,请以整数数组索引布尔索引花式索引三种方式,来获取我们需要的数组元素。
相关知识
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()

你可能感兴趣的:(#,numpy进阶,算法,python,开发语言)