1.numpy是数据科学计算的基础模块,可用来存储和处理大型矩阵
1.1.numpy创建多维数组、通用函数的方法
1.2.数组的索引与变换
1.3.numpy矩阵的创建、通用函数的方法
1.4.numpy读写文件
2.numpy基本操作
2.1.数组
2.1.1.创建一维数组
arr1=np.array([1,2,3,4]) #[1 2 3 4] print(type(arr1)) #<class ‘numpy.ndarray’>
2.1.2.创建二维数组
arr2=np.array([[1,0,1,1],[2,1,1,1],[0,2,1,1]]) #[[1 0 1 1]
[2 1 1 1]
[0 2 1 1]]
2.1.3.数组结构
print(“数组结构”,arr2.shape) #(3, 4)
2.1.4.元素类型
print(“数组元素类型”,arr2.dtype) #数组元素类型 int32
2.1.5.数组维度
print(“数组维度”,arr1.ndim) #数组维度 1
print(“数组维度”,arr2.ndim) #数组维度 2
2.1.6.重设数组的结构
arr2.shape=2,6 #2*6=size print(“重设结构后的数组arr2\n”,arr2) # [[1 0 1 1 2 1]
[1 1 0 2 1 1]]
2.1.7.利用numpy函数创建数组
arange[起始,终值[不包括],步长]
print(np.arange(10)) #[0 1 2 3 4 5 6 7 8 9]
print(np.arange(0,1,0.1)) #[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
2.1.8.等差数列[起始,结束(包括),多少个数]
print(np.linspace(0,9,10)) #[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] #等差数列公式,an=a1+(n-1)*d;d=(an-a1)/(n-1)
2.1.9.等比数列
print(np.logspace(0, 2, 20))
#以10为底,在100-102之间 第一个起始值10^0 第二个终值10^2(包括) 第三个数取20个数
2.1.10.创建全零数组 参数为元组
print(np.zeros((2, 3))) #[[ 0. 0. 0.]
[ 0. 0. 0.]]
2.1.11.全一数组 参数为元组
print(np.ones((4, 3))) #[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
2.1.12.单位矩阵(方正)
print(np.eye(3)) #[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
2.1.13.对角矩阵
print(np.diag([1, 2, 3])) #[[1 0 0]
[0 2 0]
[0 0 3]]
2.1.14.生成随机数(random)
生成随机数组
print(np.random.random(10))
生成服从均匀分布的函数
print(np.random.rand(2, 5)) (结构(2,5))
正态分布
print(np.random.randn(10, 5)) #传结构
随机整数
2<=x<10 print(np.random.randint(2, 10, size=(3, 5))) #[[5 4 6 6 8]
[8 6 5 3 7]
[4 5 8 7 5]]
2.1.15.索引访问数组
一维数组索引
arr=np.arange(10)
print(arr) #[0 1 2 3 4 5 6 7 8 9]
print(arr[:5]) #[0 1 2 3 4]
print(arr[5:]) #[5 6 7 8 9]
print(arr[::2]) #[0 2 4 6 8]
print(arr[::-1]) #[9 8 7 6 5 4 3 2 1 0]
二维数组索引
arr2=np.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]]) #[[ 1 2 3 4 5]
[ 4 5 6 7 8]
[ 7 8 9 10 11]]
第一种方法:切片:逗号前面行,后面列 arr2[行切片,列切片]
print(arr2[:2, 0]) #[1 4]
print(arr2[:2,2:4]) #[[3 4]
[6 7]]
print(arr2[1:3, 1:4:2]) #[[ 5 7]
[ 8 10]]
print(arr2[0:3:2, 1:4:2]) #[[ 2 4]
[ 8 10]]
第二种方法:arr2[(行),(列)] 逗号后面是元组
print(arr2[(0, 2), (1, 4)]) #[ 2 11]
print(arr2[(0,1, 2), (1,2,3)]) #[ 2 6 10]
第三种:布尔值切片,条件取值
mask为1:true(取值) 为0:false(不取这一行或一列的值)
不要用bool值同时去取行和列
mask=np.array([1,0,1],dtype=np.bool)
print(arr2[mask,2]) #[3 9] mask表示行取值,一定和数组的行个数一致
mask2=np.array([0,0,1,0,0],dtype=np.bool)
print(arr2[1,mask2]) #[6] mask表示列取值,一定和数组的列个数一致
2.1.16.变换数组形态
重设数组形态
arr3=np.arange(12) print(arr3) #[ 0 1 2 3 4 5 6 7 8 9 10 11]
arr4=arr3.reshape((3, 4)) print(arr4) #[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
展平数组
print(arr4.ravel())#横向展平[ 0 1 2 3 4 5 6 7 8 9 10 11]
print(arr4.ravel(“F”))#纵向展平[ 0 4 8 1 5 9 2 6 10 3 7 11]
flatten
print(arr4.flatten())#默认为“C”表示横向展平[ 0 1 2 3 4 5 6 7 8 9 10 11]
print(arr4.flatten(“F”))#纵向展平[ 0 4 8 1 5 9 2 6 10 3 7 11]
组合方式
arr5=np.array([[1,2],[3,4],[5,6]])
arr6=np.array([[11,12],[13,14],[15,16]])
print(np.hstack((arr5, arr6)))#横向组合[[ 1 2 11 12][ 3 4 13 14] [ 5 6 15 16]]
print(np.vstack((arr5, arr6)))#纵向组合 #[[ 1 2]
[ 3 4]
[ 5 6]
[11 12]
[13 14]
[15 16]]
数组分割
print(np.hsplit(arr6, 2)) #横向分割
#[array([[11],
[13],
[15]]), array([[12],
[14],
[16]])]
print(np.vsplit(arr6, 3))#纵向分割
#[array([[11, 12]]), array([[13, 14]]), array([[15, 16]])]
注意:#axis=1表示横向,axis=0表示纵向
# print(np.split(arr6, 2, axis=1))
#[array([[11],
[13],
[15]]), array([[12],
[14],
[16]])]
3.numpy矩阵
3.1.矩阵创建与矩阵运算 矩阵是ndarray的子类,矩阵继承了numpy数组对象的二维数组
3.1.1.创建矩阵的方法
matr1=np.mat(‘1 2 3;4 5 6’)
print(matr1) #[[1 2 3]
[4 5 6]]
print(type(matr1)) #<class ‘numpy.matrixlib.defmatrix.matrix’>
matr2=np.matrix([[1,2,3],[4,5,6]])
print(matr2) #[[1 2 3]
[4 5 6]]
3.1.2.bmat拼接 必须保证所拼接的数组行数相等
arr1=np.eye(2)
arr2=3arr1
print(np.bmat(‘arr1 arr2;arr2 arr1’)) #行必须相等,列可以不一样
#[[ 1. 0. 3. 0.]
[ 0. 1. 0. 3.]
[ 3. 0. 1. 0.]
[ 0. 3. 0. 1.]]
3.2.矩阵的运算
3.2.1.矩阵加减法
arr3=np.mat(‘1 2 3;2 3 4’)
arr4=np.mat(‘2 -2 3;3 3 5’)
print(arr3-arr4)
#[[-1 4 0]
[-1 0 -1]]
print(arr3+arr4)
#[[3 0 6]
[5 6 9]]
3.2.2.矩阵乘法
ab==>a的列数等于b的行数:#a.shap[1]= =b.shap[0]
arr4=np.mat(‘2 -2 3;3 3 5’) arr5=np.mat(‘1 2;1 1;0 0’)
print(arr4*arr5)
#[[0 2]
[6 9]]
对应元素相乘的方法:shape必须相等
arr3=np.mat(‘1 2 3;2 3 4’)
arr4=np.mat(‘2 -2 3;3 3 5’)
print(np.multiply(arr3, arr4))
#[[ 2 -4 9]
[ 6 9 20]]
3.2.3.求逆
matr1=np.mat(‘1 0 0;0 2 0;0 0 3’)
print(matr1.I)
3.2.4.共轭转置(实数的共轭转置就是本身)
print(matr1.H)
3.2.5.矩阵的转置
arr3=np.mat(‘1 2 3;2 3 4’) # [[1 2 3] [2 3 4]]
print(arr3.T)
#[[1 2]
[2 3]
[3 4]]
4.统计分析
4.1.排序 [sort/sorted]
4.1.1.arr3=np.random.randint(1,10,size=10) # [7 8 8 4 2 1 6 6 8 2]
arr3.sort() #[1 2 2 4 6 6 7 8 8 8]
4.1.2.arr4=np.random.randint(1,10,size=(3,6)) #[[4 9 4 2 8 5]
[8 5 2 6 6 3]
[7 9 1 1 1 8]]
arr4.sort(axis=0)#纵向排序
#[[1 3 5 6 7 8]
[2 4 5 6 7 9]
[3 4 6 6 8 9]]
arr4.sort(axis=1)#横向排序
#[[1 3 5 6 7 9]
[2 4 5 6 7 9]
[3 4 6 6 8 8]]
4.1.3.argsort函数排序
arr5=np.random.randint(1,10,size=10)
print(arr5.argsort())
#[3 2 5 1 7 0 4 8 9 6]
print(arr5) #[7 5 3 1 7 3 9 5 8 8]
取arr5中最小的前5个值
index=arr5.argsort()[:5] print(arr5[index])
#[1 1 2 3 5]
4.2.常用的统计函数 arr7=np.arange(12).reshape((3,4)) #[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
4.2.1.求和sum
print(np.sum(arr7))
print(arr7.sum(axis=0))#纵向
print(arr7.sum(axis=1))#横向
#66
[12 15 18 21]
[ 6 22 38]
4.2.2.求均值mean
print(np.mean(arr7))
print(arr7.mean(axis=0))
print(arr7.mean(axis=1))
#5.5
[ 4. 5. 6. 7.]
[ 1.5 5.5 9.5]
4.2.3.方差var
print(np.var(arr7))
print(arr7.var(axis=0))
print(arr7.var(axis=1))
4.2.4.标准差std =sqrt(var)
print(np.std(arr7))
print(arr7.std(axis=0))
print(arr7.std(axis=1))
4.2.5.最大值max
print(np.max(arr7))
print(arr7.max(axis=0))
print(arr7.max(axis=1))
4.2.6.最小值min
print(np.min(arr7))
print(arr7.min(axis=0))
print(arr7.min(axis=1))
4.2.7.最大值索引argmax
print(np.argmax(arr7))
print(arr7.argmax(axis=0))
print(arr7.argmax(axis=1))
4.2.8.最小索引argmin
print(np.argmin(arr7))
print(arr7.argmin(axis=0))
print(arr7.argmin(axis=1))
4.2.9.累计和 cumsum=[6 8 11 15 17 18 21]
print(np.cumsum(arr7))
print(arr7.cumsum(axis=0))
print(arr7.cumsum(axis=1))
4.2.10.累计积
print(np.cumprod(arr7))
print(arr7.cumprod(axis=0))
print(arr7.cumprod(axis=1))
自由主题
4.3.重复:【对谁重复,重复多少次】
4.3.1.arr6=np.arange(5)
arr7=np.arange(12).reshape((3,4))
print(np.tile(arr6, 4))
print(np.tile(arr7, 2))
#[0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4]
#[[ 0 1 2 3 0 1 2 3]
[ 4 5 6 7 4 5 6 7]
[ 8 9 10 11 8 9 10 11]]
4.3.2.对元素进行重复repeat
print(arr7.repeat(2, axis=0))#按列进行重复
print(arr7.repeat(2, axis=1))#按行进行重复
#[[ 0 1 2 3]
[ 0 1 2 3]
[ 4 5 6 7]
[ 4 5 6 7]
[ 8 9 10 11]
[ 8 9 10 11]]
#[[ 0 0 1 1 2 2 3 3]
[ 4 4 5 5 6 6 7 7]
[ 8 8 9 9 10 10 11 11]]
4.4.去重
4.4.1.names=np.array([‘小明’,‘小花’,‘小白’,‘小明’,‘小兰’,‘小白’,‘小白’])
print(np.unique(names))
#[‘小兰’ ‘小明’ ‘小白’ ‘小花’]
5.ufunc函数(数组)
5.1.四则运算
5.1.1.x=np.array([1,2,3])
y=np.array([-1,3,3])
print(x-y)
print(x+y)
print(x*y)
print(x/y)
print(x**y)
5.2.比较运算
5.2.1.x=np.array([1,2,3])
y=np.array([-1,3,3])
print(x<y) #[False True False]
mask=x<y
print(x[mask]) #[2]
print(x>y)
print(x==y)
print(x!=y)
print(x>=y)
print(x<=y)
#[ True False False]
[False False True]
[ True True False]
[ True False True]
[False True True]
5.3.广播运算:仅限一个二维数组加一个一维数组(一行或者一列)
5.3.1.arr1=np.array([[1,2,3],[3,4,5],[3,4,5]])
arr3=np.array([1,2,3])#(3,)
arr2=np.array([[1],[2],[3]])#(3,)
print(arr1+arr3)#一维里面的个数和二维列数一致
print(arr1+arr2)#一维里面的个数和二维列数一致
#[[2 4 6]
[4 6 8]
[4 6 8]]
[[2 3 4]
[5 6 7]
[6 7 8]]
5.4.逻辑运算:逻辑与 、或
5.4.1.x=np.array([1,2,3])
y=np.array([-1,3,3])
print(np.all(x = = y))
print(np.any(x == y))
#False
True
6.numpy文件读取:文本文件、二进制 保存为二进制文件
保存单一数组:save 返回.npy文件
6.1.文本文件的读取
6.1.1.文本文件的存储与读取:[.txt, .csv]
#fmt:表示保存为整数
#delimiter=’,’ 指定分隔符
np.savetxt(‘arr.txt’,arr,fmt="%d",delimiter=’,’)
data=np.loadtxt(‘arr.txt’,delimiter=’,’)
6.2.保存
6.2.1.多个数组保存 savez 返回npz文件,存放多个.npy文件
arr2=np.arange(60).reshape(6,10)
np.savez(‘savez_arr’,arr,arr2)
data=np.load(‘savez_arr.npz’)
print(list(data))
print(data[‘arr_0’])
print(data[‘arr_1’])
##[‘arr_0’, ‘arr_1’]
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
[20 21 22 23 24 25 26 27 28 29]
[30 31 32 33 34 35 36 37 38 39]
[40 41 42 43 44 45 46 47 48 49]
[50 51 52 53 54 55 56 57 58 59]
[60 61 62 63 64 65 66 67 68 69]
[70 71 72 73 74 75 76 77 78 79]
[80 81 82 83 84 85 86 87 88 89]
[90 91 92 93 94 95 96 97 98 99]]
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
[20 21 22 23 24 25 26 27 28 29]
[30 31 32 33 34 35 36 37 38 39]
[40 41 42 43 44 45 46 47 48 49]
[50 51 52 53 54 55 56 57 58 59]]
6.2.2.arr=np.arange(100).reshape(10,10)
np.save(‘save_arr’,arr)
6.3.读文件
6.3.1.data=np.load(‘save_arr.npy’) #读文件的时候一定要加后缀名称 .npy