Python-numpy-索引与切片

发布时间:2026/7/29 23:09:51

Python-numpy-索引与切片
NumPy 索引与切片NumPy 提供了比 Python list 强大得多的索引能力基本索引、切片、花式索引Fancy Indexing、布尔索引。 基本索引与切片一维数组importnumpyasnp arrnp.array([10,20,30,40,50,60])# 基本索引print(arr[0])# 10print(arr[-1])# 60倒数第一print(arr[-2])# 50# 切片返回视图非副本print(arr[1:4])# [20 30 40]print(arr[:3])# [10 20 30]前 3 个print(arr[3:])# [40 50 60]从第 3 个到最后print(arr[::2])# [10 30 50]步长 2print(arr[::-1])# [60 50 40 30 20 10]反转# 切片赋值会修改原数组arr[1:4]99print(arr)# [10 99 99 99 50 60]二维数组matnp.arange(12).reshape(3,4)print(mat)# [[ 0 1 2 3]# [ 4 5 6 7]# [ 8 9 10 11]]# 单个元素print(mat[0,0])# 0print(mat[2,-1])# 11# 整行 / 整列print(mat[1])# [4 5 6 7]第 1 行print(mat[1,:])# 同上print(mat[:,2])# [ 2 6 10]第 2 列# 子矩阵切片print(mat[0:2,1:3])# [[1 2]# [5 6]]# 步长切片print(mat[::2,::2])# 每隔一行、每隔一列# [[ 0 2]# [ 8 10]]# 行 列混合print(mat[0,:2])# [0 1]第 0 行前 2 列print(mat[:2,-1])# [3 7]前 2 行最后 1 列三维及以上tensornp.arange(24).reshape(2,3,4)# shape: (2, 3, 4) — 2 个矩阵每个 3×4print(tensor[0])# 第一个 3×4 矩阵print(tensor[0,1])# 第一个矩阵的第 1 行 → (4,)print(tensor[0,1,2])# 标量 → 6print(tensor[:,0,:])# 每个矩阵的第 0 行 → (2, 4)print(tensor[:,:,::2])# 每矩阵每隔一列 → (2, 3, 2)...Ellipsis省略号arrnp.arange(120).reshape(2,3,4,5)# 等价写法print(arr[0,:,:,:])# 完整写法print(arr[0,...])# 用 ... 代替中间的 :print(arr[...,2])# 最后一个维度的第 2 索引 → (2, 3, 4)print(arr[0,...,:3])# 第一个块最后维取前 3 → (3, 4, 3) 花式索引Fancy Indexing用整数数组来索引返回副本非视图。一维花式索引arrnp.array([10,20,30,40,50])# 用列表指定索引print(arr[[0,2,4]])# [10 30 50]# 可以用任意整数数组indicesnp.array([4,1,1,3])print(arr[indices])# [50 20 20 40]# 可以任意顺序、重复print(arr[[4,4,4,0,0]])# [50 50 50 10 10]二维花式索引matnp.arange(12).reshape(3,4)# 指定行索引print(mat[[0,2]])# 第 0 行和第 2 行# [[ 0 1 2 3]# [ 8 9 10 11]]# 指定行 列索引print(mat[[0,2,1],[0,3,1]])# 取 (0,0), (2,3), (1,1) → [0 11 5]# ix_: 取行和列的笛卡尔积子矩阵print(mat[np.ix_([0,2],[1,3])])# [[ 1 3]# [ 9 11]]# ix_ 等价于 mat[[0,2]][:, [1,3]]花式索引 vs 切片matnp.arange(12).reshape(3,4)# 切片返回视图viewmat[:2,:2]view[0,0]99print(mat[0,0])# 99 ← 原数组被修改了# 花式索引返回副本copymat[[0,1]][:,[0,1]]copy[0,0]999print(mat[0,0])# 99 ← 原数组未修改 布尔索引 ⭐arrnp.array([15,3,8,22,1,9,13])# 条件直接筛选print(arr[arr10])# [15 22 13]# 多条件用 | ~必须加括号print(arr[(arr5)(arr20)])# [15 8 9 13]print(arr[(arr5)|(arr20)])# [3 22 1]print(arr[~(arr10)])# [3 8 1 9]# ⚠️ 常见错误用 and/or 或不加括号# arr[arr 5 and arr 20] ← 报错# arr[arr 5 arr 20] ← 结果错误 优先级高# arr[(arr 5) (arr 20)] ← 正确二维布尔索引matnp.arange(12).reshape(3,4)# 按条件筛选行print(mat[mat[:,0]3])# 第 0 列 3 的行# [[ 4 5 6 7]# [ 8 9 10 11]]# 整体条件maskmat5print(mat[mask])# [6 7 8 9 10 11]返回一维数组布尔掩码赋值arrnp.array([15,3,8,22,1,9,13])arr[arr10]0# 所有 10 的变 0print(arr)# [0 3 8 0 1 9 0]arr[arr5]-1# 所有 5 的变 -1print(arr)# [-1 -1 8 0 -1 9 -1]np.where()— 条件索引三剑客条件替换三元运算arrnp.array([15,3,8,22,1,9,13])# where(条件, True时的值, False时的值)resultnp.where(arr10,1,0)print(result)# [1 0 0 1 0 0 1]resultnp.where(arr10,arr,-arr)print(result)# [ 1 -3 -8 1 -1 -9 1]条件查找返回索引arrnp.array([15,3,8,22,1,9,13])# 找到满足条件的索引indicesnp.where(arr10)print(indices)# (array([0, 3, 6]),) ← 返回元组print(indices[0])# [0 3 6]一维时print(arr[indices])# [15 22 13]# 二维matnp.arange(12).reshape(3,4)rows,colsnp.where(mat5)print(rows)# [1 1 2 2 2 2] — 行索引print(cols)# [2 3 0 1 2 3] — 列索引print(mat[rows,cols])# [6 7 8 9 10 11] — 值多条件组合# np.where 也可以处理多条件arrnp.arange(10)resultnp.where((arr3)(arr8),arr*10,arr)print(result)# [0 1 2 3 40 50 60 70 8 9]np.argwhere()— 获取非零/True 索引arrnp.array([0,5,0,3,0,8,0])print(np.argwhere(arr0))# [[1]# [3]# [5]]# 和 where 的区别argwhere 返回 (N, ndim) 数组where 返回元组np.take()/np.put()— 按索引取值/设值arrnp.array([10,20,30,40,50])# take: 按索引取值print(arr.take([0,2,4]))# [10 30 50]print(np.take(arr,[4,3,3]))# [50 40 40]# 二维按轴取matnp.arange(12).reshape(3,4)print(np.take(mat,[0,2],axis0))# 取第 0、2 行print(np.take(mat,[0,2],axis1))# 取第 0、2 列# put: 按索引设值原地修改arrnp.array([10,20,30,40,50])np.put(arr,[0,2],[99,88])print(arr)# [99 20 88 40 50]np.select()/np.clip()— 多条件/裁剪# select: 多条件多选择arrnp.array([15,3,8,22,1,9,13])conditions[arr5,arr15,True]# True 兜底choices[-1,1,0]resultnp.select(conditions,choices)print(result)# [0 -1 0 1 -1 0 0]# clip: 限制在范围内print(np.clip(arr,5,15))# [15 5 8 15 5 9 13]print(arr.clip(5,15))# 同上方法形式 多维索引技巧按行列号取值matnp.arange(12).reshape(3,4)# 提取对角线print(np.diag(mat))# [0 5 10]print(np.diag(mat,k1))# [1 6 11]上对角线# 提取上三角 / 下三角print(np.triu(mat))# 上三角含对角线print(np.tril(mat,k-1))# 下三角不含对角线# 索引数组组合row_indicesnp.array([0,1,2])col_indicesnp.array([3,2,1])print(mat[row_indices,col_indices])# [3 6 9] — 取 (0,3),(1,2),(2,1)按轴索引take_along_axismatnp.arange(12).reshape(3,4)# 取每行最大值的索引对应的列col_idxmat.argmax(axis1)# [3 3 3]resultnp.take_along_axis(mat,col_idx[:,None],axis1)print(result)# [[3] [7] [11]] 速查表需求代码单个元素arr[0, 1]/arr[-1]整行/列arr[1, :]/arr[:, 2]子矩阵arr[0:2, 1:3]步长切片arr[::2, ::3]反转arr[::-1]省略号arr[0, ..., :3]花式行索引arr[[0, 2, 4]]笛卡尔积索引arr[np.ix_([0,2], [1,3])]布尔筛选arr[arr 10]多条件arr[(a3) (a10)]条件替换np.where(arr 0, 1, -1)条件查找np.where(arr 0)列表取值np.take(arr, [0, 2])多条件选择np.select(conds, choices)裁剪np.clip(arr, lo, hi)[[numpy-总览|← 返回总览]]

相关新闻

Demeteorizer转换原理深度剖析:从meteor build到Node.js应用的幕后过程

Demeteorizer转换原理深度剖析:从meteor build到Node.js应用的幕后过程

2026/7/29 23:09:51

Demeteorizer转换原理深度剖析:从meteor build到Node.js应用的幕后过程 【免费下载链接】demeteorizer Converts a Meteor app into a standard Node.js application. 项目地址: https://gitcode.com/gh_mirrors/de/demeteorizer Demeteorizer是一款强大的工…

Apicurio Registry与Iceberg:数据湖Schema管理的终极指南

Apicurio Registry与Iceberg:数据湖Schema管理的终极指南

2026/7/29 23:09:51

Apicurio Registry与Iceberg:数据湖Schema管理的终极指南 【免费下载链接】apicurio-registry An API/Schema registry - stores APIs and Schemas. 项目地址: https://gitcode.com/GitHub_Trending/ap/apicurio-registry Apicurio Registry是一个功能强大的…

Java 23 种设计模式:从踩坑到精通 | 番外:外观模式 —— 物流订单处理实战

Java 23 种设计模式:从踩坑到精通 | 番外:外观模式 —— 物流订单处理实战

2026/7/29 23:09:51

Java 23 种设计模式:从踩坑到精通 | 番外:外观模式 —— 物流订单处理实战 摘要:外观模式为子系统中的一组接口提供一个统一的高层接口,让客户端只需一键操作即可完成原本需要多次调用的复杂流程。本文结合**智能物流中“订单处理…

别再手写提示词了:这套动态参数化模板引擎已部署至37家头部AI团队,支持实时意图识别与自动降噪

别再手写提示词了:这套动态参数化模板引擎已部署至37家头部AI团队,支持实时意图识别与自动降噪

2026/7/30 0:09:54

更多请点击: https://codechina.net 第一章:AI提示词模板大全 高质量提示词是释放大语言模型潜力的关键杠杆。本章系统梳理适用于不同场景的提示词模板,涵盖通用问答、内容创作、代码生成、逻辑推理与角色扮演五大核心类型,所有模…

2026年外贸新手AI获客软件避坑攻略:跨境魔方等工具功能价格全面对比

2026年外贸新手AI获客软件避坑攻略:跨境魔方等工具功能价格全面对比

2026/7/30 0:09:54

2026年外贸新手AI获客软件避坑攻略:跨境魔方等工具功能价格全面对比一、2026年外贸获客行业背景与刚需分析根据海关总署2025年12月发布的公开数据,2025年我国B2B外贸线上获客占比提升至68%,较2022年增长26个百分点;同时线下国际展…

INAV飞控配置终极指南:从零到稳定飞行的完整解决方案

INAV飞控配置终极指南:从零到稳定飞行的完整解决方案

2026/7/30 0:09:54

INAV飞控配置终极指南:从零到稳定飞行的完整解决方案 【免费下载链接】inav INAV: Navigation-enabled flight control software 项目地址: https://gitcode.com/gh_mirrors/in/inav INAV飞控配置是每个无人机爱好者必须掌握的核心技能,但很多新手…

ThreadLocal(存取变量)实战获取当前登录的员工

ThreadLocal(存取变量)实战获取当前登录的员工

2026/7/30 0:09:54

注意AOP所应用的注解以及service方法上自定义的Log注解

粉笔直播课适合周末集中备考考生突破吗

粉笔直播课适合周末集中备考考生突破吗

2026/7/30 0:09:54

本文面向在职备考、工作日难以抽出整块时间、只能依靠周末集中复习的公考考生,围绕"该平台直播课是否适配周末集中备考节奏、能否支撑瓶颈突破"这一核心问题做客观拆解。文中数据来源于公开财报、官网公示价格、第三方投诉平台公开投诉及用户社区讨论&…

3种方法彻底移除Windows Defender:新手也能掌握的专业指南

3种方法彻底移除Windows Defender:新手也能掌握的专业指南

2026/7/29 23:59:54

3种方法彻底移除Windows Defender:新手也能掌握的专业指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/28 13:30:18

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/28 16:04:36

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/28 16:04:35

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

粉笔直播课适合周末集中备考考生突破吗

粉笔直播课适合周末集中备考考生突破吗

2026/7/30 0:09:54

本文面向在职备考、工作日难以抽出整块时间、只能依靠周末集中复习的公考考生,围绕"该平台直播课是否适配周末集中备考节奏、能否支撑瓶颈突破"这一核心问题做客观拆解。文中数据来源于公开财报、官网公示价格、第三方投诉平台公开投诉及用户社区讨论&…

ThreadLocal(存取变量)实战获取当前登录的员工

ThreadLocal(存取变量)实战获取当前登录的员工

2026/7/30 0:09:54

注意AOP所应用的注解以及service方法上自定义的Log注解

INAV飞控配置终极指南:从零到稳定飞行的完整解决方案

INAV飞控配置终极指南:从零到稳定飞行的完整解决方案

2026/7/30 0:09:54

INAV飞控配置终极指南:从零到稳定飞行的完整解决方案 【免费下载链接】inav INAV: Navigation-enabled flight control software 项目地址: https://gitcode.com/gh_mirrors/in/inav INAV飞控配置是每个无人机爱好者必须掌握的核心技能,但很多新手…