python基础笔记(一)_numpy的基础语法
科学计算工具包:Numpy
高级数值编程工具
- 强大的N维数组对象:ndarray
- 对数组结构数据进行运算(不用遍历循环)
- 随机数、线性代数、傅里叶变换等功能
基础数据结构
-
数组的属性
- ar.ndim:输出数组维度的个数(轴数),或者说‘秩’
- ar.shape:输出数组的维度,对于n行m列的数组,shape为(n,m)
- ar.size:输出数组中元素的个数
- type(ar),ar.dtype:输出数组的类型以及其中元素的类型
- ar.itemsize:输出数组中每个元素的字节大小,int32l类型字节为4,float64的字节为8
- ar.data:含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性
-
创建数组
- arange(),类似range(),在给定间隔内返回均匀间隔的值
- linspace(): 返回在间隔[开始,停止]上计算的num个均匀间隔的样本
- zeros()/zeros_like()/ones()/ones_like() :生成全0或1的数组
- eye(),创建单位矩阵,主对角线数值为1,其余为0
通用函数
-
数组形状:均生成新数组
- 转置:ar.T:原shape为(3,4)/(2,3,4),转置结果为(4,3)/(4,3,2) → 所以一维数组转置后结果不变
- reshape:改变目标数组的形状(需与原数组元素个数相同)
- resize:返回具有指定形状的新数组,如有必要可重复元素
-
数组的复制
- ‘=’赋值运算,同列表相同,指向内存同一个值,同时改变 (浅拷贝)
- copy 方法生成数组及其数据的完整拷贝,不同时改变 (深拷贝)
-
数组类型转换
- a.astype():转换数组类型
- 数组类型用np.int32
-
数组堆叠
- numpy.hstack(tup):水平(按行顺序)堆叠数组
- numpy.vstack(tup):垂直(按列顺序)堆叠数组
-
numpy.stack(arrays, axis=0):沿着新轴连接数组的序列,形状必须一样!
- axis=0:[[1 2 3] [4 5 6]],shape为(2,3)
- axis=1:[[1 4] [2 5] [3 6]],shape为(3,2)
-
数组拆分
- numpy.hsplit(ary, indices_or_sections):将数组水平(逐列)拆分为多个子数组 → 按列拆分
- numpy.vsplit(ary, indices_or_sections):将数组垂直(行方向)拆分为多个子数组 → 按行拆
-
数组简单运算
- 与标量的运算:数序运算
- 最大值/最小值/平均值/方差/标准差
- np.sum(ar,axis=0) :axis为0,按列求和
- np.sum(ar,axis=1) :axis为1,按行求和
索引及切片
-
基本索引及切片
- 一维数组索引及切片,与列表相同
- 二维数组索引及切片
- ar[2]: 切片为下一维度的一个元素,所以是一维数组
- ar[2][2] : 二次索引,得到一维数组中的一个值
- ar[2:4],切片为两个一维数组组成的二维数组
- ar[2,2],切片数组中的第三行第三列,行列用逗号隔开区分
- ar[:2,1:],切片数组中的1,2行、2,3,4列 → 二维数组
- 二维数组索引及切片
- ar3[0],三维数组的下一个维度的第一个元素 → 一个二维数组
- ar3[0][0]:三维数组的下一个维度的第一个元素下的第一个元素 → 一个一维数组
- ar3[0][0][1]:维度为0,单个数值
-
布尔型索引及切片
- 以布尔型的矩阵去做筛选
- ar1[i,:]:在第一维度做判断,只保留True,这里第一维度就是行,ar[i,:] = ar[i](简单书写格式)
- ar1[:,j]:在第二维度做判断,这里如果ar[:,i]会有警告,因为i是3个元素,而ar在列上有4个
- 以布尔型的矩阵去做筛选
-
数组索引及切片的值更改、复制
- 一个标量赋值给一个索引/切片时,会自动改变/传播原始数组
- 复制:独立,不改变原始数组
随机数:numpy.random
- 标准正态分布:np.random.normal(size=(4,4))
-
均匀分布:
- numpy.random.rand(d0, d1, ..., dn):生成一个[0,1)之间的随机浮点数或N维浮点数组
- 生成一个随机浮点数:np.random.rand()
- 生成形状为4的一维数组:np.random.rand(4)
- 生成形状为2*3的二维数组,注意这里不是((2,3)):np.random.rand(2,3)
-
- 1000个均匀分布的样本值并绘制散点图
- numpy.random.rand(d0, d1, ..., dn):生成一个[0,1)之间的随机浮点数或N维浮点数组
-
正态分布:
- numpy.random.randn(d0, d1, ..., dn):生成一个浮点数或N维浮点数组,用法同上
-
- 1000个均匀分布的样本值正太分布并绘制散点图
-
随机分布:
- numpy.random.randint(low, high=None, size=None, dtype='l'):生成一个整数或N维整数数组
- 若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数,且high必须大于low
- np.random.randint(2):low=2:生成1个[0,2)之间随机整数
- np.random.randint(2,size=5):low=2,size=5 :生成5个[0,2)之间随机整数
- np.random.randint(2,6,size=5):low=2,high=6,size=5:生成5个[2,6)之间随机整数
- np.random.randint(5,size=(2,3)):low=5,size=(2,3):生成一个2x3整数数组,取数范围:[0,5)随机整数
- np.random.randint(2,6,(3,5)):low=2,high=6,size=(3,5):生成一个3*5整数数组,取值范围:[2,6)随机整数
- dtype参数:只能是int类型
数据的输入和输出
-
存储数组数据 .npy文件
- import os
ar = np.random.rand(5,5)
print(ar)
np.save('test.npy',ar)
print('Over')
- import os
-
读取数组数据 .npy文件
- ar_load = np.load('test.npy')
print(ar_load)
- ar_load = np.load('test.npy')
-
存储/读取文本txt文件
-
存储:np.savetxt
- np.savetxt(fname, ar, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ')
-
读取:np.loadtxt
- delimiter=',' ,注意添加分割样式
-
存储:np.savetxt