头哥Numpy初体验答案

 第一关:

  • 任务描述
  • 相关知识
  • 编程要求
  • 测试说明

任务描述

本关的小目标是,使用 Numpy 创建一个多维数组。

相关知识

在 Python 中创建数组有许多的方法,这里我们使用 Numpy 中的arange方法快速的新建一个数组:

 
  
  1. import numpy as np
  2. a = np.arange(5)

其中import numpy as np是指引入Numpy这个库,并取别名为np。之所以取别名,是为了代码编写的方便。a=np.arange(5)是指将数值0 1 2 3 4赋值给a这个变量,这样我们就快速的创建了一个一维数组。

创建多维数组的方法是:

 
  
  1. import numpy as np
  2. b = np.array([np.arange(6),np.arange(6)])

这里,我们使用两个arange方法,创建了两个1x6的一维数组,然后使用numpyarray方法,将两个一维数组组合成一个2x6的二维数组。从而达到了创建多维数组的目的。

numpy创建的数组可以直接复制,具体代码示例如下:

 
  
  1. import numpy as np
  2. x = [y for y in range(6)]
  3. b=np.array([x]*4)

该段代码会创建一个4*6的数组。

编程要求

本关的任务是,补全右侧编辑器中 Begin-End 区间的代码,以实现创建一个m*n的多维数组的功能。具体要求如下:

  • 函数接受两个参数,然后创建与之对应的的多维数组;

  • 本关的测试样例参见下文。

本关设计的代码文件cnmda.py的代码框架如下:

 
  
  1. # 引入numpy库
  2. import numpy as np
  3. # 定义cnmda函数
  4. def cnmda(m,n):
  5. '''
  6. 创建numpy数组
  7. 参数:
  8. m:第一维的长度
  9. n: 第二维的长度
  10. 返回值:
  11. ret: 一个numpy数组
  12. '''
  13. ret = 0
  14. # 请在此添加创建多维数组的代码并赋值给ret
  15. #********** Begin *********#
  16. #********** End **********#
  17. return ret

测试说明

本关的测试过程如下:

  • 平台运行step1/cnmdatest.py文件,并以标准输入方式提供测试输入;

  • cnmdatest.py文件调用cnmda中的cnmda方法,平台获取cnmdatest.py的输出,然后将其与预期输出作对比,如果一致,则测试通过;否则测试失败。

以下是平台对step1/cnmdatest.py的测试样例:

测试输入: 5 8

预期输出: (5,8)

测试输入: 4 9

预期输出: (4,9)

上代码:

# 引入numpy库
import numpy as np
# 定义cnmda函数
def cnmda(m,n):
    '''
    创建numpy数组
    参数:
   		m:第一维的长度
   		n: 第二维的长度
    返回值:
    	ret: 一个numpy数组
    '''

	ret = 0
	
    # 请在此添加创建多维数组的代码并赋值给ret
	#********** Begin *********#
	x=[y for y in range(n)];
	ret=np.array([x]*m);
	#********** End **********#
    
	return ret

第二关:

  • 任务描述
  • 相关知识
    • 向量与向量之间
      • 1.加法
      • 2.减法
      • 3.乘法(X乘)
      • 4.乘法(点乘)
      • 5.除法
    • 向量与标量之间
      • 1.加法
      • 2.减法
      • 3.乘法
      • 4.除法
      • 5.求余
      • 6.矩阵转置
      • 7.矩阵的逆
  • 编程要求
  • 测试说明

任务描述

本关的小目标是,学会Numpy二维数组的一些基本操作。

相关知识

Numpy库可以直接进行一些四则运算,快速的处理两个Numpy数组:

 
  
  1. a = np.array([[1,2,3],[4,5,6]])
  2. b = np.array([[4,5,6],[1,2,3]])

向量与向量之间

1.加法

 
  
  1. In:np.add(a,b) 或 a+b
  2. Out:array([[5, 7, 9],
  3. [5, 7, 9]])

2.减法

 
  
  1. In:np.subtract(a,b) 或 a-b
  2. Out:array([[-3, -3, -3],
  3. [ 3, 3, 3]])

3.乘法(X乘)

 
  
  1. In:np.multiply(a,b) 或 a * b
  2. Out:array([[ 4, 10, 18],
  3. [ 4, 10, 18]])

4.乘法(点乘)

 
  
  1. a = np.array([[1,2,3],[4,5,6]])
  2. b = np.array([4,5,6])
  3. In: np.dot(a,b)
  4. Out:array([32, 77])

5.除法

 
  
  1. a = np.array([[1,2,3],[4,5,6]])
  2. b = np.array([[4,5,6],[1,2,3]])
  3. In:np.divide(a,b) 或 a/b
  4. Out:array([[ 0.25, 0.4 , 0.5 ],
  5. [ 4. , 2.5 , 2. ]])

向量与标量之间

a = np.array([[1,2,3],[4,5,6]])

1.加法

 
  
  1. In: a +1
  2. Out:array([[2, 3, 4],
  3. [5, 6, 7]])

2.减法

 
  
  1. In: a -1
  2. Out:array([[0, 1, 2],
  3. [3, 4, 5]])

3.乘法

 
  
  1. In: a*2
  2. Out:array([[ 2, 4, 6],
  3. [ 8, 10, 12]])

4.除法

 
  
  1. In: a/2
  2. Out:array([[ 0.5, 1. , 1.5],
  3. [ 2. , 2.5, 3. ]])

5.求余

 
  
  1. In:a%2
  2. Out:array([[1, 0, 1],
  3. [0, 1, 0]])

6.矩阵转置

 
  
  1. In:a.T
  2. Out:array([[1, 4],
  3. [2, 5],
  4. [3, 6]])

7.矩阵的逆

矩阵可逆的充要条件是矩阵满秩。

 
  
  1. import numpy as np
  2. import numpy.linalg as lg
  3. a = np.array([[1,2,3],[4,5,6],[7,8,9]])
  4. In:lg.inv(a)
  5. Out:array([[ 3.15251974e+15, -6.30503948e+15, 3.15251974e+15],
  6. [ -6.30503948e+15, 1.26100790e+16, -6.30503948e+15],
  7. [ 3.15251974e+15, -6.30503948e+15, 3.15251974e+15]])

编程要求

本关的任务是,补全右侧编辑器中 Begin-End 区间的代码,以实现向量与标量相加和相乘的的功能。具体要求如下:

  • 函数接受三个参数,然后进行向量与标量之间的运算;

  • 本关的测试样例参见下文;

  • 本关设计的代码文件cal.py的代码框架如下:

 
  
  1. # 引入numpy库
  2. import numpy as np
  3. # 定义opeadd函数
  4. def opeadd(m,b,n):
  5. '''实现加法
  6. 参数:
  7. m:是一个数组
  8. b:是一个列表
  9. n:是列表中的索引
  10. 你需要做的是 m+b[n]
  11. 返回值:
  12. ret: 一个numpy数组
  13. '''
  14. ret = 0
  15. # 请在此添加 创建多维数组 的代码 并赋值给ret
  16. #********** Begin *********#
  17. #********** End **********#
  18. return ret
  19. # 定义opemul函数
  20. def opemul(m,b,n):
  21. '''实现乘法
  22. 参数:
  23. m:是一个数组
  24. b:是一个列表
  25. n:是列表中的索引
  26. 你需要做的是 m+b[n]
  27. 返回值:
  28. ret: 一个numpy数组
  29. '''
  30. ret = 0
  31. # 请在此添加 创建多维数组 的代码 并赋值给ret
  32. #********** Begin *********#
  33. #********** End **********#
  34. return ret

测试说明

本关的测试过程如下:

  • 平台运行step5/caltest.py文件,并以标准输入方式提供测试输入;

  • caltest.py文件调用cal中的方法,平台获取caltest.py的输出,然后将其与预期输出作对比,如果一致,则测试通过;否则测试失败。

以下是平台对step5/caltest.py的测试样例:

a= np.array([[1,2,3],[4,5,6]]) b = [1,2,3] 测试输入: add 预期输出:

 
  
  1. [[2 3 4]
  2. [5 6 7]]

测试输入:mul 预期输出:

 
  
  1. [[ 2 4 6]
  2. [ 8 10 12]]

上代码:

# 引入numpy库
import numpy as np
# 定义opeadd函数
def opeadd(m,b,n):
    '''
    参数:
    m:是一个数组
    b:是一个列表
    n:是列表中的索引
    你需要做的是 m+b[n]
    返回值:
    ret: 一个numpy数组
    '''    
    ret = 0

    #********** Begin *********#
    ret=m+b[n];
      #********** End **********#

    return ret
# 定义opemul函数
def opemul(m,b,n):
    '''
    参数:
    m:是一个数组
    b:是一个列表
    n:是列表中的索引
    你需要做的是 m*b[n]
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0

    #********** Begin *********#
    ret=m*b[n];
    #********** End **********#
    return ret


第3关:Numpy数组的切片与索引

  • 任务描述
  • 相关知识
  • 编程要求
  • 测试说明

任务描述

本关的小目标是,从数组中选择指定的元素。

相关知识

一维Numpy数组的切片操作与Python列表的切片一样。下面首先来定义数字0 1 2直到8的数组,然后通过指定下标37来选择数组的部分元素,这实际上就是提取数组中值为36的元素。

 
  
  1. In: import numpy as np
  2. In: a = np.arange(9)
  3. In: a[3:7]
  4. Out: array([3,4,5,6])

同时用下标选择元素,下标范围从07,并且下标每次递增2,如下所示:

 
  
  1. In: a[:7:2]
  2. Out:array([0,2,4,6])

也可以像Python数组一样,用负值下标来反转数组:

 
  
  1. In: a[::-1]
  2. Out: array([8,7,6,5,4,3,2,1,0])

对于二维数组的索引,类似与Python数组的列表:

 
  
  1. In: a=np.array([[1,2,3],[4,3,2]])
  2. In: a[1][0]
  3. Out:array([4])
  4. In:a[1,:2] #获取第1维的前2个元素
  5. Out:array([4, 3])

编程要求

本关的任务是,右侧编辑器中 Begin-End 区间的代码,以实现Numpy数组的索引功能的功能。具体要求如下:

  • 函数接受两个参数,然后返回切片找出的指定元素;
  • 本关的测试样例参见下文;
  • 本关设计的代码文件ce.py的代码框架如下:
 
  
  1. # 引入numpy库
  2. import numpy as np
  3. # 定义cnmda函数
  4. def ce(a,m,n):
  5. '''
  6. 参数:
  7. a:是一个Numpy数组
  8. m:是第m维数组的索引
  9. n:第m维数组的前n个元素的索引
  10. 返回值:
  11. ret: 一个numpy数组
  12. '''
  13. ret = 0
  14. # 请在此添加切片的代码,实现找出多维数组a中第m个数组的前n个元素并赋值给ret
  15. #********** Begin *********#
  16. #********** End **********#
  17. return ret

测试说明

本关的测试过程如下:

  • 平台运行step2/cetest.py文件,并以标准输入方式提供测试输入;

  • cetest.py文件调用ce中的ce方法,平台获取cetest.py的输出,然后将其与预期输出作对比,如果一致,则测试通过;否则测试失败。

  • 预处理的数组

[[1,2,3,4,5],[7,8,9,10,11],[12,13,14,15]]

以下是平台对step2/cetest.py的测试样例:

测试输入:
1 3 预期输出:

[7,8,9]

测试输入:

2 2 预期输出:

[12,13]

代码:

# 引入numpy库
import numpy as np
# 定义cnmda函数
def ce(a,m,n):
    '''
    参数:
    a:是一个Numpy数组
    m:是第m维数组的索引
    n:第m维数组的前n个元素的索引
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加切片的代码,实现找出多维数组a中第m个数组的前n个元素 并赋值给ret
    #********** Begin *********#
    ret=a[m,:n]
    #********** End **********#
    return ret

第4关:Numpy数组的堆叠

直接上代码:

# 引入numpy库
import numpy as np
# 定义varray函数
def  varray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的垂直叠加并赋值给ret
    #********** Begin *********#
    ret=np.vstack((m,n))
    #********** End **********#
    return ret
# 定义darray函数
def  darray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的深度叠加并赋值给ret
    #********** Begin *********#
    ret=np.dstack((m,n))
    #********** End **********#
    return ret
 # 定义harray函数
def  harray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的水平叠加并赋值给ret
    #********** Begin *********#
    ret=np.hstack((m,n))
    #********** End **********#
    return ret

第5关:Numpy的拆分

代码:

# 引入numpy库
import numpy as np
# 定义varray函数
def  vsarray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是需要拆分到的维度
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的纵向拆分并赋值给ret
    #********** Begin *********#
    ret=np.vsplit(m,n)
    #********** End **********#
    return ret
# 定义darray函数
def  dsarray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是需要拆分到的维度
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的深度拆分并赋值给ret
    #********** Begin *********#
    ret=np.dsplit(m,n)
    #********** End **********#
    return ret
 # 定义harray函数
def  hsarray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是需要拆分到的维度
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的水平拆分并赋值给ret
    #********** Begin *********#
    ret=np.hsplit(m,n)
    #********** End **********#
    return ret

若想更加仔细的了解numpy的更多用法请参考:JH头哥Numpy初体验答案_第1张图片https://gyh0.github.io/

你可能感兴趣的:(python,python,矩阵,机器学习)