Numpy
简介
Numerical Python,是一个开源的科学计算库,用于快速处理任意维度的数组,Numpy支持常见矩阵操作,对于数值计算,Numpy的计算比直接的Python计算更加简洁
ndarray是Numpy处理多维数组的对象,ndarray是灵活、快速的大数据容器(n-任意,d-dimension维度,array-数组)
优势
- 存储风格:与list不同,ndarray要求存储数据类型相同,存储查找效率高
- 并行计算:ndarray支持并行运算(向量化计算),非常适合机器学习
- 底层语言:使用C语言编写,内部解除了GIL,对数组的操作不受Python解释器限制,效率远高Python
ndarray属性
属性名 | 解释 |
---|
ndarray.shape | 返回一个包含行,列信息的元组 |
ndarray.ndim | 返回ndarray的维度 |
ndarray.size | 返回元素总和 |
ndarray.dtype | 返回元素类型 |
| |
ndarray类型
类型 | 解释 | 简写 |
---|
np.bool | 用一个字节存储的布尔类型(True或False) | ‘b’ |
np.int8 | 一个字节大小,-128至127 | ‘i’ |
np.int16 | 整数,-216 至 216 -1 | ‘i2’ |
np.int32 | 整数,-232 至 232 -1 | ‘i4’ |
np.int64 | 整数,-263 至 263 -1 | ‘i8’ |
np.uint8 | 无符号整数,0至255 | ‘u’ |
np.uint16 | 无符号整数,0至65535 | ‘u2’ |
np.uint32 | 无符号整数,0至232 -1 | ‘u4’ |
np.uint64 | 无符号整数,0至264 -1 | ‘u8’ |
np.float16 | 半精度浮点数:16位,正负号1位,指数5位,精度10位 | ‘f2’ |
np.float32 | 单精度浮点数:32位,正负号1位,指数8位,精度23位 | ‘f4’ |
np.float64 | 双精度浮点数:64位,正负号1位,指数11位,精度52位 | ‘f8’ |
np.complex64 | 复数,分别用两个32位浮点数表示实部和虚部 | ‘c8’ |
np.complex128 | 复数,分别用两个64位浮点数表示实部和虚部 | ‘c16’ |
np.object_ | python对象 | ‘O’ |
np.string_ | 字符串 | ‘S’ |
np.unicode_ | unicode类型 | ‘U’ |
ndarray生成
方法 | 解释 |
---|
np.zeros(shape=(行,列)) | 生成全为0的ndarray |
np.ones(shape=(行,列)) | 生成全为1的ndarray |
np.full(shape=(行,列),88) | 生成全为88的ndarray |
np.array(数据) | 最常用的数据转ndarray方法,深拷贝 |
np.copy(数据) | 深拷贝 |
np.asarray(数据) | 浅拷贝吗,跟随原数据改变 |
np.linspace(起始,结束,个数) | 生成固定范围的ndarray(左闭右闭,等距离) |
np.arange(起始,结束,步长) | 生成固定范围的ndarray(左闭右开) |
np.random.uniform(low=最小值,high=最大值,size=个数) | 生成均匀分布的随机数组 |
np.random.normal(loc=μ,scale=σ2 ,size=个数) | 生成正太分布的随机数组 |
基本操作
切片索引
操作 | 解释 |
---|
ndarray[::,::] | 切片 |
ndarray[ , , ] | 索引 |
| |
形状修改
方法 | 解释 |
---|
ndarray.reshape((行,列)) | 列代表个数,即每一行有几个(返回新ndarray) |
ndarray.resize((行,列)) | 列代表个数,即每一行有几个(在原有ndarray上修改) |
ndarray.T | 将行列进行转置 |
类型修改、去重
方法 | 解释 |
---|
ndarray.astype(“类型”) | 数据类型转化 |
ndarray.tostring() | 序列化到本地 |
np.unque(ndarray) | 数组去重 |
重点操作
逻辑运算
操作 | 解释 |
---|
nparray[nparray 条件] | 满足条件的数字返回true,不满足返回false |
nparray[nparray 条件] = 值 | 给满足条件的数据进行统一赋值操作 |
np.all(nparray[nparray 条件]) | 里面全部满足条件,返回true,否则返回false |
np.any(nparray[nparray 条件]) | 里面只要有满足条件的,返回true,否则返回false |
np.where(布尔,true操作,false操作) | 三元运算符 |
np.logical_and(ndarray 条件1,ndarray 条件2) | 多条件逻辑与操作,返回布尔数组 |
np.logical_or(ndarray 条件1,ndarray 条件2) | 多条件逻辑或操作,返回布尔数组 |
| |
| |
统计运算
操作 | 解释 |
---|
np.max(ndarray) | ndarray.max() max、min、std、mean用法类似 | 返回所有值的 |
np.max(ndarray,axis=),axis=0代表按列,=1代表按行 | 0,获取每列最值;1,获取每行最值 |
ndarray.argmin(axis=1) | 获取每行最小值所在的索引 |
数组间运算
操作 | 解释 |
---|
ndarray +(-、*、/) 数字 | ndarray所有元素与该数字运算 |
ndarray+ndarray | 两个ndarray符合广播机制 |
np.mat(ndarray) | 存储矩阵(matrix类型) |
矩阵运算
- 满足前列与后行相同:(M,N)*(N,L)=(M,L)前行乘后列
- ndarray的矩阵乘法运算:
操作 | 解释 |
---|
ndarray1 @ ndarray2 | 矩阵乘法,需满足(m,n)*(n,l) |
np.matmul(ndarray1,ndarray2) | 同上 |
np.dot(ndarray1,ndarray2) | 同上 |
- matrix类型矩阵相乘运算:mat1*mat2
- 在ndarray中,linalg提供了:np.linalg.det(ndarray)、np.linalg.inv(ndarray)求行列式、逆矩阵