应用Numpy实现数组之间的运算
纪要
4.1 Numpy优势
1.定义
开源的Python科学计算库,<br /> 用于快速处理任意维度的数组<br /> Numpy中,存储对象是ndarray
2.创建
np.array([])
3.numpy的优势
内存块风格 -- 一体式存储<br /> 支持并行化运算<br /> 效率高于纯Python代码 -- 底层使用了C,内部释放了GIL
4.2 N维数组-ndarray[**]
1.ndarray的属性
属性名字 属性解释<br /> ndarray.shape 数组维度的元组<br /> ndarray.ndim 数组维数<br /> ndarray.size 数组中的元素数量<br /> ndarray.itemsize 一个数组元素的长度(字节)<br /> ndarray.dtype 数组元素的类型
2.ndarray的形状
np.array()<br /> 三维数组不好理解 -- excel中有多个sheet
3.ndarray的类型
bool<br /> int<br /> float<br /> str<br /> ...<br /> 注意:若不指定,整数默认int64,小数默认float64
4.3 基本操作
1 生成数组的方法[**]
1.生成0和1的数组
np.ones()<br /> np.ones_like()
2.从现有数组中生成
np.array -- 深拷贝<br /> np.asarray -- 浅拷贝
3.生成固定范围数组
np.linspace()<br /> nun -- 生成等间隔的多少个<br /> np.arange()<br /> step -- 每间隔多少生成数据<br /> np.logspace()<br /> 生成以10的N次幂的数据
4 生成随机数组
1.均匀分布生成
np.random.uniform()<br /> low<br /> high<br /> size
2.正态分布[**]
均值,方差<br /> 均值 -- 图形的左右位置<br /> 方差 -- 图像是瘦,还是胖<br /> 值越小,图形越瘦高,数据越集中<br /> 值越大,图形越矮胖,数据越分散
3.正态分布api[*]
np.random.normal()<br /> low<br /> high<br /> size
2.数组的索引、切片[*]
直接索引<br /> 先对行进行索引,再进行列索引 -- [*, #]<br /> 高维数组索引,从宏观到微观
3.形状修改[**]
1.对象.reshape
不进行行列互换,产生新变量
2.对象.resize
不进行行列互换,对原值进行更改
3.对象.T
进行行列互换
4.类型修改[*]
对象.astype()
5.数组去重[*]
np.unique()
4.4 ndarray运算[**]
1.逻辑运算
大于,小于直接进行判断<br /> 赋值:满足要求,直接进行赋值
2.通用判断函数
np.all()<br /> 所有满足要求,才返回True<br /> np.any()<br /> 只要有一个满足要求,就返回True
3.三元运算符
np.where()<br /> 满足要求,赋值第一个值,否则赋值第二个值<br /> np.logical_and()<br /> 并<br /> np.logical_or()<br /> 或
4.统计运算
min<br /> max<br /> midian<br /> mean<br /> std -- 标准差<br /> var -- 方差<br /> argmax -- 最大值下标<br /> argmin -- 最小值下标
4.5 矩阵[*]
1.矩阵和向量
矩阵:理解-二维数组<br /> 向量:理解-一维数组
2.加法和标量乘法
加法: 对应位置相加<br /> 乘法: 标量和每个位置的元素相乘
3.矩阵向量(矩阵)乘法[*]
[M行, N列]*[N行, L列] = [M行, L列]
4.矩阵乘法性质
1.满足结合律,不满足交换律
5.单位矩阵
对角线为1,其他位置为0的矩阵
6.逆
矩阵A*矩阵B=单位矩阵I<br /> 那么A和B就互为逆矩阵
7.转置
行列互换
4.6 数组间运算[*]
1.数组和数字是直接可以进行运算
2.数组和数组
需要满足广播机制<br /> 维度相同<br /> shape对应位置为1
3.矩阵乘法api
np.dot --点乘<br /> np.matmul -- 矩阵相乘<br /> 注意:两者之间在进行矩阵相乘时候,没有区别<br /> 但是,dot支持矩阵和数字相乘