numpy库的使用
1、numpy简介
- 多维数组库,创建多维数组很方便,可以替代多维列表
- 速度比多维列表快
- 支持向量和矩阵的各种数学运算
- 所有元素类型必须相同
- pip3 install numpy安装(如果安装报Could not build wheels for numpy which use PEP 517 and cannot be installed directly,先使用pip3 install --upgrade pip升级pip,再进行安装)
2、numpy创建数组的函数
函数 | 功能 |
array(x) | 根据列表或元组x创建数组 |
arange(x,y,i) | 创建一维数组,元素等价于range(x,y,i) |
linespace(x,y,n) | 创建一个由区间[x,y]的n-1等分点构成的一维数组,包含x和y |
random.randint(...) | 创建一个元素为随机整数的数组 |
zeros(n) | 创建一个元素全为0.0的长度为n的数组 |
ones(n) | 创建一个元素全为1.0的长度为n的数组 |
numpy创建数组示例
3、numpy数组常用属性和函数
属性或函数 | 含义或功能 |
dtype | 数组元素的类型 |
ndim | 数组是几维的 |
shape | 数组每一维的长度 |
size | 数组元素个数 |
argwhere(...) | 查找元素 |
tolist() | 转换为list |
min() | 求最小元素 |
max() | 求最大元素 |
reshape(...) | 改变数组的形状 |
flatten() | 转换成一维数组 |
numpy数组常用属性和函数示例
4、numpy数组元素增删
函数 | 功能 |
append(x,y) | 若y是数组、列表或元组,就将y的元素添加进数组x得到新数组。否则将y本身添加进数组x得到新数组 |
concatenate(...) | 拼接多个列表 |
delete(...) | 删除数组元素的到新数组 |
numpy添加数组元素示例
numpy删除数组元素示例
5、在numpy数组中查找元素示例
6、numpy数组的数学运算示例
7、numpy数组切片
示例中的代码
import numpy as np
'''numpy创建数组示例'''
print(np.array([1,2,3,4])) #将列表【1,2,3,4]转化为一位数组输出[1 2 3 4]
print(np.arange(1,9,2)) #相当于rang(1,9,2),输出[1 3 5 7]
print(np.linspace(1,10,4)) #相当于把1到10之间到数字等分成(4-1)份,输出[ 1. 4. 7. 10.]
print(np.random.randint(10,20,[2,3]))#在10(包含)到20(不包含)之间生成随机2行3列的二维数组,输出结果
#[[18 17 15]
#[17 17 12]]
print(np.random.randint(10,20,5)) #在10(包含)到20(不包含)之间生成随机5个数的一维数组,输出结果[12 15 19 12 11]
a=np.zeros(3) #生成包含3个0的一维数组
print(a) #输出结果[0. 0. 0.]
print(list(a)) #将数组a转化为列表,数据结果[0.0, 0.0, 0.0]
b=np.zeros((2,3),dtype=int) #生成一个2行3列值为0的二维数组,指定数据类型为int型
print(b) #输出结果
#[[0 0 0]
#[0 0 0]]
"""numpy数组常用属性和函数"""
c=np.array([i for i in range(12)]) #生成一个从0 到11的一维数组
print(c) #输出结果[ 0 1 2 3 4 5 6 7 8 9 10 11]
d=c.reshape((3,4)) #生成一个新的3行4列的数组
print(d) #输出结果
#[[ 0 1 2 3]
#[ 4 5 6 7]
#[ 8 9 10 11]]
print(len(d)) #输出数组d有几行,输出结果3
print(d.size) #输出数组d有几个元素,输出结果12
print(d.ndim) #数组d是几维的,输出结果2
print(d.shape) #数组d的行列数,输出(3, 4)
print(d.dtype) #查看数据类型,输出int64
l=d.tolist() #将二维数组转化为二维列表
print(l) #输出结果 [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
f=d.flatten() #把多维数组转化为一维数组
print(f) #输出结果[ 0 1 2 3 4 5 6 7 8 9 10 11]
"""numpy添加数组元素"""
a3=np.array((1,2,3)) #生成一维数组[1 2 3]
b3=np.append(a3,10) #在a3中添加10,生成新的一维数组b3
print(b3) #输出结果[ 1 2 3 10]
print(np.append(a3,[10,20])) #在a3中添加10,20,输出结果[ 1 2 3 10 20]
c3=np.zeros((2,3),dtype=int)
print(np.append(a3,c3)) #将c3添加到a3中,输出结果[1 2 3 0 0 0 0 0 0]
print(np.concatenate((a3,[10,20],a3))) #将a3,[10,20],a3合并生成新到一维数组,输出结果[ 1 2 3 10 20 1 2 3]
print(np.concatenate((c3,np.array([[10,20,30]])))) #将10,20,30添加到c3的第3行,输出结果
#[[ 0 0 0]
#[ 0 0 0]
#[10 20 30]]
# print(np.concatenate(c3,np.array([[10,20,30]])))
print(np.concatenate((c3,np.array([[1,2],[10,20]])),axis=1)) #将c3的第0行尾部添加1,2,第1行的尾部添加10,20,axis=1指定添加的内容为列,输出结果
#[[ 0 0 0 1 2]
#[ 0 0 0 10 20]]
"""numpy删除数组元素"""
a=np.array([1,2,3,4])
b=np.delete(a,1) #删除数组a中下标为1的元素
print(b) #输出结果[1 3 4]
b=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(np.delete(b,1,axis=0)) #删除b数组中下标为1的行,axis=0表示行,得到新数组
#输出结果
#[[ 1 2 3 4]
#[ 9 10 11 12]]
print(np.delete(b,1,axis=1))#删除b数组中下标为1的列,axis=1表示行,得到新数组
#输出结果
#[[ 1 3 4]
#[ 5 7 8]
#[ 9 11 12]]
print(np.delete(b,[1,2],axis=0))#删除b数组中下标为1、2的行,axis=0表示行,得到新数组
#输出结果[[1 2 3 4]]
print(np.delete(b,[1,3],axis=1))#删除b数组中下标为1、3的列,axis=1表示列,得到新数组
#输出结果
#[[ 1 3]
#[ 5 7]
#[ 9 11]]
"""在numpy数组中查找元素"""
a=np.array([1,2,3,5,3,4])
pos=np.argwhere(a==3) #在数组a中查找值为3的元素,分别是下标为2、4的元素
print(pos) #输出结果[[2] [4]] a是一维数组2 4表示列,行为0,默认省略
a=np.array([[1,2,3],[4,5,2]])
print(2 in a) #判断2是不是在数组a中,输出结果True
pos=np.argwhere(a==2)
print(pos) #输出结果[[0 1] [1 2]]表示第0行第1列,第1行第2列
b=a[a>2] #在a中查找大于2第元素
print(b) #输出结果[3 4 5]
a[a>2]=-1 #把数组a中值大于2第元素替换为-1
print(a) #输出结果
#[[ 1 2 -1]
#[-1 -1 2]]
"""numpy数组的数学运算"""
a=np.array([1,2,3,4])
b=a+1 #数组b为数组a每个元素对应加1
print(b) #输出结果[2 3 4 5]
print(a*b)#a,b数组中每个元素对应相乘得到新的数组,输出结果[ 2 6 12 20]
print(a+b) #a,b数组中每个元素对应相加得到新的数组,输出结果[3 5 7 9]
c=np.sqrt(a*10) #将a中的每个元素乘10,然后开平方根
print(c) #输出结果[3.16227766 4.47213595 5.47722558 6.32455532]
"""numpy数组切片"""
"""numpy数组切片是'视图',是原数组的一部分,而非一部分的拷贝"""
a=np.arange(8)
b=a[3:6] #取下标为3,4,5的元素
print(b) #输出结[3 4 5]
c=np.copy(a[3:6]) #c是拷贝a数组中下标为3 4 5的元素
b[0]=100
print(a) #修改数组a的值 输出结果[ 0 1 2 100 4 5 6 7]
print(c) #不会修改数组c的值 输出结果[3 4 5]
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
b=a[1:3,1:4] #取b的1、2行,每行取1、2、3列
print(b)
#输出结果
#[[ 6 7 8]
#[10 11 12]]