机器学习数据科学包(一)——numpy数据包
目录
1.numpy概述
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
安装:python3 -m pip install numpy
导入:import numpy as np
2.矩阵构造方法:
- np.array(列表[,类型]) 创建矩阵
- np.zeros((行,列)[,dype = np.int16]) 创建0矩阵
- np.ones((行,列)[,dype = np.int16]) 创建1矩阵
- np.empty((行,列)[,dype = np.int16]) 创建空矩阵(其实不能生成完全的空矩阵)
- np.eye(数字) 创建单位阵
- np.diag([对角1,对角2...]) 创建对角矩阵
- np.arange(起始,终止,步长) 创建数组
- np.lines(起始,终止,段数) 创建线段
- np.random.randint(最小值, 最大值, (行,列)) 创建整数随机矩阵
- np.random.random((行,列)) 创建值为0-1随机矩阵
创建0矩阵
创建1矩阵
创建空矩阵(注意:不能生成完全空矩阵)
创建数组
创建线段
创建值为0-1随机矩阵
3.矩阵形状维度相关方法:
- a[:,np.newaxis]) 行增加维度
- a[np.newaxis,:]) 列增加维度
- a.reshape(行,列) 重定义形状
- a.ndim() 查看维度
- a.shape() 查看形状
- a.size() 查看容量
- a.dtype() 查看类型
- a.flatten() 将矩阵变为数组
创建矩阵并查看维度,形状,大小
查看类型
重定义形状
4.矩阵基本操作
- a+b、a-b 按位相加减
- a*b/a**2 按位乘
- np.sin(矩阵) 按位求sin
- a<3 按位比较
- np.dot(a,b)和a.dot(b) 矩阵乘法
- np.max(a)和np.max(a,axis=0/1) 最大值
- np.min(a)和np.min(a,axis=0/1) 最大值
- np.sum(a)和np.sum(a,axis=0/1) 求和
- np.median(a)和np.median(a,axis=0/1) 求中位数
- np.mean(a)和np.mean(a,axis=0/1) 求平均值
- np.argmin(a)和np.argmax(a) 找最大值最小值索引
- np.cumsum(a)和np.diff(a) 按位累加/按位累减
- np.nonzeros(a) 查找非0项
- np.sort(a) 行内排序
- a.T 和 np.transpose(a) 矩阵的逆
- np.clip(A,min,max) 修剪矩阵
以上方法axis=0表示按列,axis=1表示按行
按位减
矩阵按位乘
矩阵求sin
按位比较
矩阵乘法
最大值,最小值,求和
最大值/最小值索引
平均值
中位数
累加
累减
查找非0项
行内排序
矩阵求逆
矩阵修剪
5.矩阵查找
与Python序列一致 查找某元素A[i][j]
- A[1,2] 查找索引1,2的元素
- A[:,i ] 查找第i列元素元素
6.矩阵遍历
与Python序列一样 用for遍历
- for row in A: print(row) 按行打印
- for col in A.T: print(col) 按列打印
- for item in A.flat: print(item) 打印全部元素
按行打印
按列打印
打印全部元素
7.矩阵合并
- np.vstack(a,b...) 垂直合并
- np.hstack(a,b...) 水平合并
- np.concatenate((a,b...),axis=0/1) 合并
注:合并操作正相反,0代表行1代表列。为了方便记最好还是使用vstack与hstack合并。
垂直合并
水平合并(数组的水平合并相当于连接)
数组的逆实际上不翻转,想要翻转成列向量,需要加1维度
列向量的水平合并
列向量的垂直合并
列向量的水平合并
8.矩阵分割
- np.vsplit(a,块数) 垂直分割
- np.hsplit(a,块数) 水平分割
- np.split(a,块数,axis=0/1) 平均分割
- np.array_split(a,块数,axis=0/1) 不平均分割
注:分割操作正相反,0代表行1代表列。为了方便记最好还是使用vsplit与hsplit分割。
垂直分割与水平分割
、
平均分割(按列)
平均分割(按行)
平均分割,如果分割不了会报错
不平均分割
9.矩阵浅拷贝与深拷贝
与Python数组相同,矩阵是可变数据结构,直接相当于传递引用
深拷贝: a.copy()