8. Numpy索引和切片
1. 前言
在 NumPy 中,如果想要访问,或修改数组中的元素,您可以采用索引或切片的方式,比如使用从 0 开始的索引依次访问数组中的元素,这与 Python 的 list 列表是相同的。
NumPy 提供了多种类型的索引方式,常用方式有两种:基本切片与高级索引。本节重点讲解基本切片。
2. 基本切片
NumPy 内置函数 slice() 可以用来构造切片对象,该函数需要传递三个参数值分别是 start(起始索引)、stop(终止索引) 和 step(步长) ,通过它可以实现从原数组的上切割出一个新数组。
示例如下:
1 2 3 4 5 | import numpy as np a = np.arange(10) #生成切片对象 s = slice(2,9,3)#从索引2开始到索引9停止,间隔时间为2 print(a[s]) |
输出结果:
[2 5 8]
您也可以通过冒号来分割切片参数,最终也能获得相同结果,示例如下:
1 2 3 4 | import numpy as np a = np.arange(10) b = a[2:9:2] print(b) |
输出结果:
1 | [2 5 8] |
下面对冒号切片做简单地说明:
- 如果仅输入一个参数,则将返回与索引相对应的元素。 对于上述示例来说
[3]
就会返回 3。 - 如果在其前面插入“:”如
[:9]
,则会返回 0-8 的所有数字(不包含9)。 - 如是
[2:]
则会返回 2-9 之间的数字。 - 如果在两个参数之间,如
[2:9]
,则对两个索引值之间的所有元素进行切片(不包括停止索引)。
下面对冒号类型的切片做了简单的实例演示:
示例 1:
1 2 3 | a = np.arange(10) b = a[3] print (b) |
输出结果:
1 | 3 |
示例 2:
1 2 3 | import numpy as np a = np.arange(10) print (a[2:]) |
输出结果:
1 | [2 3 4 5 6 7 8 9] |
示例 3:
1 2 3 | import numpy as np a = np.arange(10) print a[2:5] |
输出结果如下:
1 | [2 3 4] |
3. 多维数组切片
多维数组切片操作,实例如下:
1 2 3 4 5 | import numpy as np a = np.array([[1,2,3],[3,4,5],[4,5,6]]) print(a) # 从[1:]索引处开始切割 print(a[1:]) |
输出结果:
[[1 2 3] [3 4 5] [4 5 6]] #切割后的新数组 [[3 4 5] [4 5 6]]
注意:切片还可以使用省略号“…”,如果在行位置使用省略号,那么返回值将包含所有行元素,反之,则包含所有列元素。
实例演示如下:
1 2 3 4 5 6 7 8 9 | import numpy as np #创建a数组 a = np.array([[1,2,3],[3,4,5],[4,5,6]]) #返回数组的第二列 print (a[...,1]) #返回数组的第二行 print (a[1,...]) #返回第二列后的所有项 print (a[...,1:]) |
输出结果:
#第二列数组 [2 4 5] #第二行数组 [3 4 5] #返回第二列及以后的所有元素 [[2 3] [4 5] [5 6]]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)