4.0 学习目标
- 目标
- 了解Numpy预算速度上的优势
- 知道Numpy的数组内存块风格
- 知道Numpy的并行化运算
- 应用
- 机器学习、深度学习各种框架的基础库
4.1 Numpy的优势
1 numpy
什么是Numpy?
Numpy是一个开源的python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作。使用ndarray存储对象来处理多维数组,该对象是一个快速而灵活的大数据容量。
2 ndarray
如何创建?
np.array()
3 Numpy的优势是什么?
- 内存块风格——体式存储
- 支持并行化运算
- 效率高于纯python代码
- 底层使用了C,内部释放了GTL
4.2 Numpy为数组-ndarray
1 ndarray的属性
属性名字 属性解释
ndarray.shape 数组维度的元组
ndarray.ndim 数组维数
ndarray.size 数组中的元素数量
ndarray.itemsize 一个数组元素的长度(字节)
ndarray.dtype 数组元素的类型
2 形状
3 类型
d = np.array([1,2,3], dtype=np.float32)
d
4.3 基本操作
1 生成数组的方法
1.1 生成0和1的数组
-
np.ones(shape[,dtype,order])
-
np.ones_like(a[, dtype, order,subok])
-
np.zeros(shape[,dtype,order])
-
np.zerps_like(a[,dtype,order,subok])
1.2 从现有数组生成
1.2.1 生成方式
- np.array()
- np.asaarray()
1.3 生成固定范围数组
- np.linspace() ——生成等间隔的多少个
- np.arrange() —— 每间隔多少生成数据
- np.logspace() —— 生成以10的N次幂的数据
1.4 生成随机数组 np.random()
1.均匀分布生成
np.random.uniform()
low
high
size
2.正态分布[*]
均值,方差
均值 – 图形的左右位置
方差 – 图像是瘦,还是胖
值越小,图形越瘦高,数据越集中
值越大,图形越矮胖,数据越分散
3.正态分布api[]
np.random.normal()
low
high
size
2.数组的索引、切片[***]
直接索引
先对行进行索引,再进行列索引 – [*, #]
高维数组索引,从宏观到微观
3.形状修改[**]
1.对象.reshape
不进行行列互换,产生新变量
2.对象.resize
不进行行列互换,对原值进行更改
3.对象.T
进行行列互换
shape是查看数据有多少行多少列
reshape()是数组array中的方法,作用是将数据重新组织
新的形状应该与原来的形状兼容,即行数和列数相乘后等于a中元素的数量。
4.类型修改[*]
对象.astype(np.int32)
5.数组去重[*]
np.unique()
4.4 ndarray运算
1.逻辑运算
大于,小于直接进行判断
赋值:满足要求,直接进行赋值
2.通用判断函数
np.all()
所有满足要求,才返回True
np.any()
只要有一个满足要求,就返回True
3.三元运算符
np.where()
满足要求,赋值第一个值,否则赋值第二个值
np.logical_and()
并
np.logical_or()
或
4.统计运算
min
max
midian
mean
std – 标准差
var – 方差
argmax – 最大值下标
argmin – 最小值下标
4.5 矩阵
1.矩阵和向量
矩阵:理解-二维数组
向量:理解-一维数组
2.加法和标量乘法
加法: 对应位置相加
乘法: 标量和每个位置的元素相乘
3.矩阵向量(矩阵)乘法[*****]
[M行, N列]*[N行, L列] = [M行, L列]
4.矩阵乘法性质
1.满足结合律,不满足交换律
5.单位矩阵
对角线为1,其他位置为0的矩阵
6.逆
矩阵A*矩阵B=单位矩阵I
那么A和B就互为逆矩阵
7.转置
行列互换
4.6 数组间运算[*]
1.数组和数字是直接可以进行运算
2.数组和数组
需要满足广播机制: (或)
1.维度相同
2.shape对应位置为1
如 [2,6]+[2,1]可以进行运算 (都属于两维)
3.矩阵乘法api
np.dot –点乘
np.matmul – 矩阵相乘
注意:两者之间在进行矩阵相乘时候,没有区别
但是,dot支持矩阵和数字相乘