第一阶段 Numpy
练习1 :Numpy初体验
第1关:Numpy创建数组
任务描述
本关的小目标是,使用 Numpy 创建一个多维数组。
相关知识
在 Python 中创建数组有许多的方法,这里我们使用 Numpy 中的arange方法快速的新建一个数组:
import numpy as np
a = np.arange(5)
其中import numpy as np是指引入Numpy这个库,并取别名为np。之所以取别名,是为了代码编写的方便。a=np.arange(5)是指将数值0 1 2 3 4赋值给a这个变量,这样我们就快速的创建了一个一维数组。
创建多维数组的方法是:
import numpy as np
b = np.array([np.arange(6),np.arange(6)])
这里,我们使用两个arange方法,创建了两个1x6的一维数组,然后使用numpy的array方法,将两个一维数组组合成一个2x6的二维数组。从而达到了创建多维数组的目的。
numpy创建的数组可以直接复制,具体代码示例如下:
import numpy as np
x = [y for y in range(6)]
b=np.array([x]*4)
该段代码会创建一个4*6的数组。
# 引入numpy库
import numpy as np
# 定义cnmda函数
def cnmda(m,n):
'''
创建numpy数组
参数:
m:第一维的长度
n: 第二维的长度
返回值:
ret: 一个numpy数组
'''
ret = 0
# 请在此添加创建多维数组的代码并赋值给ret
#********** Begin *********#
b = np.arange(n);
ret = np.array([b]*m)
#********** End **********#
return ret
第2关:Numpy数组的基本运算
任务描述
本关的小目标是,学会Numpy二维数组的一些基本操作。
相关知识
Numpy库可以直接进行一些四则运算,快速的处理两个Numpy数组:
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[4,5,6],[1,2,3]])
# 引入numpy库
import numpy as np
# 定义opeadd函数
def opeadd(m,b,n):
'''
参数:
m:是一个数组
b:是一个列表
n:是列表中的索引
你需要做的是 m+b[n]
返回值:
ret: 一个numpy数组
'''
ret = 0
#********** Begin *********#
y = np.array(b[n])
ret=np.add(m,y)
'''ret=m+b[n]'''
#********** End **********#
return ret
# 定义opemul函数
def opemul(m,b,n):
'''
参数:
m:是一个数组
b:是一个列表
n:是列表中的索引
你需要做的是 m*b[n]
返回值:
ret: 一个numpy数组
'''
ret = 0
#********** Begin *********#
x = np.array(b[n])
ret = np.multiply(m,b[n])
'''ret=m*b[n]'''
#********** End **********#
return ret
第3关:Numpy数组的切片与索引
任务描述
本关的小目标是,从数组中选择指定的元素。
相关知识
一维Numpy数组的切片操作与Python列表的切片一样。下面首先来定义数字0 1 2直到8的数组,然后通过指定下标3到7来选择数组的部分元素,这实际上就是提取数组中值为3到6的元素。
In: import numpy as np
In: a = np.arange(9)
In: a[3:7]
Out: array([3,4,5,6])
# 引入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 *********#
y=np.array(a)
ret=y[m,:n]
#********** End **********#
return ret
第4关:Numpy数组的堆叠
任务描述
本关的目标是,改变Numpy数组的形状。
相关知识
使用Numpy,我们可以方便的更改数组的形状,比如使用reshape()、ravel()、flatten()、transpose()函数等。
# 引入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数组进行拆分。
相关知识
使用Numpy,我们可以方便的对数组进行拆分,比如使用hsplit()、vsplit()、dsplit()、split()函数等。
# 引入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
练习2:NumPy数组的高级操作
第1关:堆叠操作
任务描述
本关任务:根据本关所学知识,实现均值统计功能。
相关知识
为了完成本关任务,你需要掌握stack的操作。
stack
stack的意思是堆叠的意思,所谓的堆叠就是将两个ndarray对象堆叠在一起组合成一个新的ndarray对象。根据堆叠的方向不同分为hstack以及vstack两种。
import numpy as np
def get_mean(feature1, feature2):
'''
将feature1和feature2横向拼接,然后统计拼接后的ndarray中每列的均值
:param feature1:待`hstack`的`ndarray`
:param feature2:待`hstack`的`ndarray`
:return:类型为`ndarray`,其中的值`hstack`后每列的均值
'''
#********* Begin *********#
y=np.hstack((feature1,feature2))
return y.mean(axis=0)
#********* End *********#
第2关:比较、掩码和布尔逻辑
任务描述
本关任务:编写一个能比较并筛选数据的程序。
相关知识
为了完成本关任务,你需要掌握:1. 如何对numpy进行比较运算;2. 如何使用逻辑数组。
比较
在许多情况下,数据集可能不完整或因无效数据的存在而受到污染。我们要基于某些准则来抽取、修改、计数或对一个数组中的值进行其他操作时,就需要掩码了。接下来将学习如何用 布尔掩码 来查看和操作数组中的值。
和算术运算符一样,比较运算符在numpy中也是通过通用函数来实现的。比较运算符和其对应的通用函数如下:
比较运算符 通用函数
== np.equal
!= np.not_equal
< np.less
<= np.less_equal
> np.greater
>= np.greater_equal
import numpy as np
def student(num,inpu