说明:以练习题的方式,学习python基础知识点,主要是数据分析方向常用的numpy、pandas、matplotlib等库对应的练习题。仅供参考,题目来源于网络,如有侵权请联系我删除。
(1)创建一个1到10的数组,然后逆序输出。
答:实现数组逆序方法包括切片,reversed()函数和自定义函数实现。对比习题(一)中列表逆序输出,想想区别。
#切片
import numpy as np
a=np.arange(1,11)
a[: : -1]
#reversed()函数
import numpy as np
a=np.arange(1,11)
for i in a.reversed():
print(i)
(2)创建一个长度为20的全1数组,然后变成一个4×5的二维矩阵并转置。
答:创建全1数组采用ones()函数,改变矩阵形状用reshape()函数。查看矩阵形状用shape()函数。可试试区分以下函数:shape(),reshape(),type(),dtype()
【shape()查看形状,reshape()改变形状,type()数组类型,dtype()数组中元素类型】
import numpy as np
#生成全1数组
b = np.ones(20,dtype=int)
#改变数组形状
b.reshape(4,5)
(3)创建一个3x3x3的随机数组。 (提示: np.random.random)
答:如代码所示。注意括号,尝试区分random(),randn(),randint()。
【random()返回随机生成的一个实数,它在[0,1)范围内;randint()随机生一个整数int类型,可以指定这个整数的范围,同样有上限和下限值;randn()以给定的形状创建一个数组,数组元素来符合标准正态分布N(0,1) 】
import numpy as np
c = np.random.random((3,3,3))
(4)从1到10中随机选取10个数,构成一个长度为10的数组,并将其排序。获取其最大值最小值,求和,求方差。
答:排序sort()函数,最大值max()函数,最小值min(),求和sum()函数,方差var()函数。除此之外还可以采用切片的方式从排序后的数组中取出最大值最小值(即:a[-1]和a[0])
import numpy as np
#生成数组
a = np.random.randint(1,11,10)
#排序
a.sort()
#最大值
a.max()
#最小值
a.min()
#方差
a.var()
(5)从1到10中随机选取10个数,构成一个长度为10的数组,选出其中的奇数。
答:如代码所示。其中b%2==1返回值是布尔类型,即True 或 False
import numpy as np
b = np.random.randint(1,11,10)
b[b%2==1]
(6)生成0到100,差为5的一个等差数列,然后将数据类型转化为整数。
答:生成等差数列采用linspace()函数,转换数据类型采用astype()函数。
import numpy as np
#生成等差数据
a = np.linspace(0,100,21)
#改变类型
a.astype('int')
(7)从1到10中随机选取10个数,大于3和小于8的取负数。(可参考(5)题答方法想想)
import numpy as np
a = np.random.randint(1,11,10)
a[(a>3)&(a<8)]*=-1
(8)在数组[1, 2, 3, 4, 5]中相邻两个数字中间插入1个0。
答:如果直接插入0,则会涉及数组中元素的后移操作等。所以换一种思路。插入0后形成共9个元素的数组,先生成一个全零长度为9的数组。
import numpy as np
a=[1,2,3,4,5]
b =np.zeros(9,dtype='int')
b[: : 2]=a
(9)新建一个5乘5的随机二位数组,交换其中两行?比如交换第一二行。
答:注意randint()中第三个参数,注意交换行操作a[[1,0,2,3,4]]。
import numpy as np
#生成二维数组
a = np.random.randint(1,10,(5,5))
#交换第一行和第二行
a=a[[1,0,2,3,4]]
(10)把一个10*2的随机生成的笛卡尔坐标转换成极坐标。
答:区别笛卡尔坐标与极坐标概念。笛卡尔坐标就是(x,y);极坐标是(r,R)【百度下极坐标吧】
import numpy as np
#笛卡尔坐标
a = np.random.randint(1,10,(10,2))
#极坐标
x = a[:,0]
y = a[:,1]
r = np.sqrt(x**2+y**2) #距原点距离
R = np.arctan(y/x) #弧度
(11)创建一个长度为10并且除了第五个值为1其余的值为2的向量。(全1向量乘以2就是啦)
import numpy as np
a = np.ones(10,dtype='int')*2
a[4]=1
(12)创建一个长度为10的随机向量,并求其累计和。
答:注意累加和哦,使用cumsum()函数。
import numpy as np
a = np.random.randint(1,11,10)
a.cumsum()
(13)将数组中的所有奇数替换成-1。(对比题(5),再想想)
import numpy as np
a=np.random.randint(1,11,10)
a[a%2==1] = -1
(14)构造两个4乘3的二维数组,按照3种方法进行连接?
答:二维数组连接,vstack()函数,hstack()函数,dstack()函数。也可以使用stack()函数,配合axis=0,1参数使用,完成数组连接,例如np.stack((a,b),axis=0)。
import numpy as np
a = np.random.randint(1,10,(4,3))
b = np.random.randint(1,10,(4,3))
np.vstack((a,b))
np.hstack((a,b))
np.dstack((a,b))
(15)获取数组 a 和 b 中的共同项(索引位置相同,值也相同)。 a = np.array([1,2,3,2,3,4,3,4,5,6]),b = np.array([7,2,10,2,7,4,9,4,9,8])
答:因为需要索引相同,值相同。考虑数组与数组间相减运算。
import numpy as np
a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
c = a-b
a[c==0]
(16)从数组 a 中提取 5 和 10 之间的所有项。a=np.array([7,2,10,2,7,4,9,4,9,8])
答:我也不确定题目中 5 和 10 之间是指索引还是数值,所以分别如下:
import numpy as np
a=np.array([7,2,10,2,7,4,9,4,9,8])
#索引
a[5:10]
#数值
a[(a>=5)&(a<=10)]
注:数组部分结束。如果想自己练习,可以到我的百度网盘下载原题,使用Jupyter notebook自己写python代码实现。加油哦!
百度网盘题目地址:https://pan.baidu.com/s/1A7JFRdaBYLlnFVn6xT_SOg