第1关:赋值定义较复杂数据结构
任务描述
本关任务:对比Python的基本数据类型(列表、元组、字典等),数组具有更灵活的数据存储方式,比如一维数组和二维数组或者矩阵,特别是对于数值型数据来说更有优势,根据给出的列表L1=1,2,3,4,0.1,7和嵌套列表L2= \[1,2,3,4,(5,6,7,8)],请利用numpy包中的array()函数将其定义为一维数组和二维数据。
相关知识
为了完成本关任务,你需要掌握:1.如何获取数组的长度,2.如何遍历数组。
利用array()函数创建数组
基于array()函数,可以将列表、元组、嵌套列表、嵌套元组等给定的数据结构转化为数组。值得注意的是,利用array函数之前,要导入Numpy。示例代码如下:
#1.先预定义列表d1,元组d2,嵌套列表d3、d4和嵌套元组d5
d1=1,2,3,4,0.1,7 #列表
d2=(1,2,3,4,2.3) #元组
d3=\[1,2,3,4,5,6,7,8] #嵌套列表,元素为列表
d4=(1,2,3,4),(5,6,7,8) #嵌套列表,元素为元组
d5=((1,2,3,4),(5,6,7,8)) #嵌套元组
#2.导入Numpy,并调用其中的array函数,创建数组
import numpy as np
d11=np.array(d1)
d21=np.array(d2)
d31=np.array(d3)
d41=np.array(d4)
d51=np.array(d5)
#3. 删除d1、d2、d3、d4、d5变量
del d1,d2,d3,d4,d5
输出:
--
开始你的任务吧,祝你成功!
python
#将列表L1定义为一维数组
#将嵌套列表L2定义为二维数组
#在函数中定义以上数组,并返回计算结果l1,l2
import numpy as np
L1=[1,2,3,4,0.1,7]
L2=[[1,2,3,4],(5,6,7,8)]
#********** Begin **********#
def return_values():
l1 = np.array(L1)
l2 = np.array(L2)
return(l1,l2)
#********** End **********#
第2关:内嵌函数定义较复杂数据结构
任务描述
本关任务:在编程过程中,预先定义一些数组变量用来保存程序产生的结果是非常必要的,请给出利用numpy包中ones ()、zeros()、arange()函数定义的例子。
相关知识
为了完成本关任务,你需要掌握:1.如何内置函数创建数组。
内置函数创建数组
利用内置函数,可以创建一些特殊的数组。例如,可以利用ones(n,m)函数创建n行m列元素全为1的数组,利用zeros(n,m)函数创建n行m列元素全为0的数组,利用arange(a,b,c)创建以a为初始值,b−1为末值,c为步长的一维数组。其中a和c参数可省,这时a取默认值为0,c取默认值为1。
示例代码如下:
z1=np.ones((3,3)) #创建3行3列元素全为1的数组
z2=np.zeros((3,4)) #创建3行4列元素全为0的数组
z3=np.arange(10) #创建默认初始值为0,默认步长为1,末值为9的一维数组
z4= np.arange(2,10) #创建默认初始值为2,默认步长为1,末值为9的一维数组
z5= np.arange(2,10,2) #创建默认初始值为2,步长为2,末值为9的一维数组
输出:
编程要求
根据提示,在右侧编辑器补充代码,完成所给出的任务。
开始你的任务吧,祝你成功!
python
#按要求完成以下任务:
#① 3行3列元素全为1的数组
#② 3行3列元素全为0的数组
#③ 初始值为2、末值为9、步长为2的数组
#④ 默认初始值0,步长为1的,末值为9的一维数组
#⑤ 返回计算结果A,B,C,D
#********** Begin **********#
import numpy as np
def return_values():
A=np.ones((3,3))
B=np.zeros((3,3))
C=np.arange(2,10,2)
D=np.arange(0,10)
return(A,B,C,D)
#********** End **********#
第3关:数组运算
任务描述
本关任务:现有数组A=np.array(1,3,3.1,4.5)和B= np.array( \[1,2,3,4,(5,6,7,8),9,10,11,12]),请求解出A的最大值、最小值、正弦值、余弦值、长度和A乘B的程序。
相关知识
为了完成本关任务,你需要掌握:1.如何进行数组的加减乘除等运算。
数组运算
数组的运算主要包括数组之间的加、减、乘、除运算,数组的乘方运算,以及数组的数学函数运算。
示例代码如下:
import numpy as np
A=np.array(\[1,2,3,4]) #定义二维数组A
B=np.array(\[5,6,7,8]) #定义二维数组B
C1=A-B #A、B两个数组元素之间相减,结果赋给变量C1
C2=A+B #A、B两个数组元素之间相加,结果赋给变量C2
C3=A*B #A、B两个数组元素之间相乘,结果赋给变量C3
C4=A/B #A、B两个数组元素之间相除,结果赋给变量C4
C5=A/3 #A数组所有元素除以3,结果赋给变量C5
C6=1/A #1除以A数组所有元素,结果赋给变量C6
C7=A**2 #A数组所有元素取平方,结果赋给变量C7
C8=np.array(1,2,3,3.1,4.5,6,7,8,9) #定义数组C8
C9=(C8-min(C8))/(max(C8)-min(C8)) #对C8中的元素做极差化处理,结果赋给变量C9
D=np.array(\[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]) #定义数组D
#数学运算
E1=np.sqrt(D) #对数组D中所有元素取平方根,结果赋给变量E1
E2=np.abs(1,-2,-100) #取绝对值
E3=np.cos(1,2,3) #取cos值
E4=np.sin(D) #取sin值
E5=np.exp(D) #取指数函数值
输出:
开始你的任务吧,祝你成功!
python
#现给出数组A和B,按顺序完成以下任务:
#① 求解A的最大值、最小值、余弦值、正弦值、长度
#② 求A乘B
#③ 返回计算结果Max_A,Min_A,cos_A,sin_A,le_A,result
#********** Begin **********#
#导入numpy包
import numpy as np
def return_values():
A=np.array([[1,3,3.1,4.5]])
B=np.array([[1,2,3,4],(5,6,7,8),[9,10,11,12]])
Max_A=np.max(A)
Min_A=np.min(A)
cos_A=np.cos(A)
sin_A=np.sin(A)
le_A=len(A)
result=A*B
return(Max_A,Min_A,cos_A,sin_A,le_A,result)
#********** End **********#
第4关:数组切片
任务描述
本关任务:现有数组A=np.array(\[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]),编程实现如下功能:1)将6、7、14、16这四个元素顺序切片出来构成一个2*2数组;2)以第0列元素大于5构造逻辑索引记为I,以I为索引切片数组A的第1、3列元素获得新的数组,记为B。
相关知识
为了完成本关任务,你需要掌握:1.如何获取数组的切片。
常见的数组切片方法
一般地,假设D为待访问或切片的数据变量,则访问或者切片的数据=D①,②。其中①为对D的行下标控制,②为对D的列下标控制,行和列下标控制通过整数列表来实现。但是需要注意①整数列表中的元素不能超出D中的最大行数,而②不能超过D中的最大列数。为了更灵活地操作数据,取所有的行或者列,可以用":"来实现。同时,行控制还可以通过逻辑列表来实现。
示例代码如下:
import numpy as np
D=np.array(\[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]) #定义数组D
#访问D中行为1,列为2的数据,注意下标是从0开始的
D12=D1,2
#访问D中第1、3列数据
D1=D:,\[1,3]
#访问D中第1、3行数据
D2=D\[1,3,:]
#取D中满足第0列大于5的所有列数据,本质上行控制为逻辑列表
Dt1=DD\[:,0>5,:]
#取D中满足第0列大于5的2、3列数据,本质上行控制为逻辑列表
#Dt2=DD\[:,0>5,2,3]
TF=True,False,False,True
#取D中第0、3行的所有列数据,本质上行控制为逻辑列表,取逻辑值为真的行
Dt3=DTF,:
#取D中第0、3行的2、3列数据
#Dt4=DTF,\[2,3]
#取D中大于4的所有元素
D5=DD\>4
输出:
利用ix_()函数进行数组切片
数组的切片也可以通过ix_()函数构造行、列下标索引器实现。
示例代码如下:
import numpy as np
D=np.array(\[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]) #定义数组D
#提取D中行数为1、2,列数为1、3的所有元素
D3=Dnp.ix_(\[1,2,1,3)]
#提取D中行数为0、1,列数为1、3的所有元素
D4=Dnp.ix_(np.arange(2),\[1,3)]
#提取以D中第1列小于11得到的逻辑数组作为行索引,列数为1、2的所有元素
D6=Dnp.ix_(D\[:,1<11,1,2)]
#提取以D中第1列小于11得到的逻辑数组作为行索引,列数为2的所有元素
D7=Dnp.ix_(D\[:,1<11,2)]
#提取以第2.5.1节中的TF=True,False,False,True逻辑列表为行索引,列数为2的所有元素
TF=True,False,False,True
D8=Dnp.ix_(TF,\[2)]
#提取以第2.5.1节中的TF=True,False,False,True逻辑列表为行索引,列数为1、3的所有元素
D9=Dnp.ix_(TF,\[1,3)]
输出:
开始你的任务吧,祝你成功!
python
#********** Begin **********#
#1.导入numpy包
import numpy as np
def return_values():
#2.给出的定义数组A
A=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
#3.对数组A切片取出6,7,14,16
D1 = A[2][1]
D2 = A[2][3]
D3 = A[3][1]
D4 = A[3][3]
#4.用切出的数构造成一个2*2的数组
arr = np.array([[D1, D2], [D3, D4]])
#1.构造逻辑索引(筛选第0列大于5的元素)
I=arr[arr[:, 0] > 5, :]
#2.逻辑索引I对数组1,3列切片,并返回计算结果B
B=I
return(B)
#********** End **********#
第5关:数组连接
任务描述
本关任务:现有数组A=np.array(\[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])和B= np.array(1,1,1,1),请将数组A和数组B进行水平连接获得新数组C,即C的前4列来源于A,最后一列来源于B。
相关知识
为了完成本关任务,你需要掌握:1.如何获取数组的连接。
数组连接
在数据处理中,多个数据源的集成整合是经常发生的。数组间的集成与整合主要体现在数组间的连接,包括水平连接和垂直连接两种方式。水平连接函数用hstack()实现,垂直连接函数用vstack()实现。注意输入参数为两个待连接数组组成的元组。
示例代码如下:
import numpy as np
A=np.array(\[1,2,3,4]) #定义二维数组A
B=np.array(\[5,6,7,8]) #定义二维数组B
C_s=np.hstack((A,B)) #水平连接要求行数相同
C_v=np.vstack((A,B)) #垂直连接要求列数相同
输出:
开始你的任务吧,祝你成功!
python
#注意:数组A和B水平连接要求列数相同,因此B要转换成矩阵
#********** Begin **********#
import numpy as np
#1.导入numpy包
def return_values():
#2.定义数组A和数组B
A=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
B=np.array([1,1,1,1])
#3.水平连接数组A和数组B,获得数组C,并返回计算结果C
C=np.hstack((A, B.reshape(-1, 1)))
return(C)
#********** End **********#