numpy常用操作
矩阵运算
- * 表示按元素相乘
- @ 表示按矩阵相乘,或使用A.dot(B)
- 使用不同类型的数组进行操作时,结果数组的类型应为更一般或更精确的类型(称为向上转换),数值型字符串传送给float64类型的数组时,类型会自动转换成float64。当建立一个np.array时,如果有字符串,有数字,数字会转换成字符串,如果有混合类型,自动转换成其中最高级别类型。
矩阵索引
- 一维数组可以进行索引、切片、迭代,像list一样
- 多维数组一个轴有一个索引,用逗号隔开,当索引数量少于轴的数量时,会被认为是完整的切片。
- 若有多个轴,可以使用...代替,如x是5个轴的矩阵,
x[1,2,...]
相当于x[1,2,:,:,:],x[...,3]
等效于x[:,:,:,:,3],x[4,...,5,:]
等效于x[4,:,:,5,:]
花式索引,索引可以是一维数组,可以是多维数组(每个数组为第一维的索引)
布尔索引,在属性分配中很有用
矩阵视图
# 不同的数组对象可以共享相同的数据 c = a.view() # a和c共享数据,都可以改变 c.base is a # True c.flag.owndata # False # 切片返回视图 s = a[:,0] # 改变s的值会改变a值,如果不使用a了,应在后面加.copy(),这样del a时a就可以释放内存了,否则del a也不会删除a # 深拷贝 d = a.copy() # d是a的完整副本
Mat类型
mat类型和2维以上ndarray类型不可使用set(),会报错不可哈希,TypeError: unhashable type: 'matrix'。一维ndarray类型可以哈希
a.A # 转成数组 a.A1 # 转成一维数组
创建矩阵
np.array([1,2]) # 创建数组,不能传多个元素,也可以传序列 np.zeros((size)) # 0数组 np.ones((size)) # 1数组 np.empty((size)) # 空数组,内容随机 np.eye(size) # 单位矩阵 np.arange(0,10,1) # 产生数字数组,类似于range(), 不过返回数组而不是列表 np.linspace(0,1,10) # 划分一个范围 np.r_[1:10,11,12] # 创建一个行,允许使用范围操作符:,行为类似于vstack np.c_[1:10,1:10] # 创建多个列,但是数量要一致,行为类似于hstack a[:,np.newaxis] # 创建新轴,若a是1维,返回列矩阵 ax,bx,cx = np.ix_(a,b,c) # ax,bx,cx 都是三维数据,查看shape,result = ax+bx*cx的矩阵即使a+b*c的值
形状操作
a.reshape(size) # 重排矩阵,若将size设为-1,则自动计算其他size的大小。也可以直接对a.shape赋值 a.resize(size) # 重排矩阵,改变原矩阵,返回None a.reshape(-1) # 返回一维新数组 a.ravel() # 返回一维新数组 np.hstack((a, b)) # 矩阵合并,水平合并,等效于column_stack(()) np.vstack((a, b)) # 矩阵合并,垂直合并,等效于row_stack(()) np.hsplit(a,n) # 矩阵拆分,水平拆分为n个,a的列要可以分成n个 np.hsplit(a,(c1,)) # 矩阵拆分,水平在c1出拆分,c1为0则会拆出来一个空矩阵 np.vsplit np.split(a,(c1,),axis=1) # 沿行拆分,作用同np.hsplit() np.tile(a, (size)) # 复制矩阵
矩阵方法和数学函数:
a.shape # 数组形状 a.size # 元素总数 a.ndim # 轴的个数(维度) a.sum(axis=0) # 求和,默认求所有元素的和 a.cumsum(axis=0) #累加求和 a.min(axis=0) # 最小值 a.max(axis=0) # 最大值 a.argmax(axis=0) # 最大值,返回索引 a.argsort(axis=0) # 排序,返回索引,默认axis=1对每一行排序 np.argsort(a,axis=0) # 排序,返回索引,对某一列排序可以先用某一列排序返回索引,再用索引查所有数据 np.nonzero(a) # 返回一个元组,为非零索引,2维矩阵返回包含两个array的元组([0,1],[2,1])表示在位置[0,2]和[1,2]处非零。或a.nonzero() a.flat # 返回迭代器,矩阵中所有元素的迭代器,用于循环所有元素 a.T # 转置 a.transpose() # 转置 np.trace(a) # 求迹 # 这些函数对数组元素进行运算,产生一个数组作为输出 np.sin(a) # sin函数 np.exp(a) # 指数 np.exp2(a) # 底数为2的指数 np.log(a) # a的对数,底数为10 np.log2(2) np.sqrt(a) # 开方 np.floor(a) # 向下取整 np.var(a) # 方差,或a.var() np.pi # pi np.inf # 无穷 # 线性代数计算 np.linalg(a) # 求逆 np.linalg.solve(a,y) # 求线性解,ax=y np.linalg.eig(a) # 求特征值,特征矩阵
随机函数
np.random.random((size)) # 产生0-1随机数,形状为size np.random.rand(d1,d2,...) # 产生0-1均匀分布随机数,形状为d1,d2... np.random.randn(d1,d2,...) # 产生标准正态分布(均值为0,方差为1),形状为d1,d2... np.random.normal(loc=mu, scale=sigma, size=None) # 产生正态分布(均值为mu,方差为sigma,size) np.random.uniform(low=a, high=b, size=None) # 产生a到b的均匀分布随机数,形状为size np.random.randint(low, high=None, size=None, dtype='l') # 产生均匀分布的整数,若只有一个参数,从0开始,不包括最大值 np.random.shuffle(a) # 打乱顺序,返回Nono,在原数据上面进行洗牌。如果a是多维数组,只对第一维,也即是列进行洗牌,
---
本文来自博客园,作者:Bingmous,转载请注明原文链接:https://www.cnblogs.com/bingmous/p/15643741.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?