NumPy索引和切片详解(附带实例)
NumPy 数组元素是通过数组的索引和切片来访问和修改的,因此索引和切片是 NumPy 中最重要、最常用的概念。
【实例】获取一维数组 n1 中索引为 0 的元素,程序代码如下:
【实例】通过索引获取二维数组中的元素,程序代码如下:
NumPy 中用冒号分隔切片参数来进行切片操作,语法格式如下:
【实例】实现简单的切片操作,对数组 n1 进行切片式索引,如下图所示。

图 1 切片式索引示意图
程序代码如下:

图 2 反向索引示意图
【实例】常用的切片式索引操作程序代码如下:
【实例】创建一个 3 行 4 列的二维数组,实现简单的索引操作,效果如下图所示。

图 3 二维数组索引示意图
程序代码如下:

图 4 二维数组切片式索引示意图
程序代码如下:
NumPy索引
所谓数组的索引,是用于标记数组中对应元素的唯一数字,从 0 开始,即数组中的第一个元素的索引是 0,以此类推。NumPy 数组可以使用标准 Python 语法 x[obj] 来标记索引,其中 x 是数组,obj 是索引。【实例】获取一维数组 n1 中索引为 0 的元素,程序代码如下:
import numpy as np # 导入numpy模块 n1=np.array([1,2,3]) # 创建一维数组 print(n1[0]) # 输出一维数组中的第一个元素运行程序,结果为:
1
【实例】通过索引获取二维数组中的元素,程序代码如下:
import numpy as np # 导入numpy模块 n1=np.array([[1,2,3],[4,5,6]]) print(n1[1][2]) # 输出二维数组中第2行第3列的元素运行程序,结果为:
6
NumPy切片式索引
数组切片可以理解为对数组的分割,按照等分或者不等分原则,将一个数组分割为多个片段,它与 Python 中列表的切片操作一样。NumPy 中用冒号分隔切片参数来进行切片操作,语法格式如下:
[start:stop:step]
参数说明:- start:起始索引。
- stop:终止索引。
- step:步长。
【实例】实现简单的切片操作,对数组 n1 进行切片式索引,如下图所示。

图 1 切片式索引示意图
程序代码如下:
import numpy as np # 导入numpy模块 n1=np.array([1,2,3]) # 创建一维数组 print(n1[0]) # 输出第1个元素 print(n1[1]) # 输出第2个元素 print(n1[0:2]) # 输出第1个元素至第3个元素(不包括第3个元素) print(n1[1:]) # 输出从第2个元素开始以后的元素 print(n1[::2]) # 输出第1个元素(0省略)至第4个元素(不包括第4个元素)运行程序,结果如下:
1
2
[1 2]
[2 3]
[1 3]
- 索引是左闭右开区间,如上述代码中的 n1 [0: 2],只能取到索引从 0 到 1 的元素,而取不到索引为 2 的元素。
- 当没有 start 参数时,代表从索引 0 开始取元素,如上述代码中的 n1 [:2]。
- start、stop 和 step 这 3 个参数都可以是负数,代表反向索引。以 step 参数为例,如下图所示:

图 2 反向索引示意图
【实例】常用的切片式索引操作程序代码如下:
import numpy as np # 导入numpy模块 n = np.arange(10) # 使用arange()函数创建一维数组 print(n) # 输出一维数组 print(n[:3]) # 输出第1个元素(0省略)至第4个元素(不包括第4个元素) print(n[3:6]) # 输出第4个元素至第7个元素(不包括第7个元素) print(n[6:]) # 输出第7个元素至最后一个元素 print(n[::-1]) # 输出所有元素 print(n[::1]) # 输出第1个元素至最后一个元素 print(n[:2]) # 输出第1个元素至最后一个元素,以5为步长 print(n[1::5]) # 输出第2个元素至最后一个元素,以5为步长 print(n[2::6]) # 输出第3个元素至最后一个元素,以6为步长 # start、stop、step为负数时 print(n[::-1]) # 输出所有元素且步长是-1 print(n[-3::-1]) # 输出倒数第3个元素至倒数第1个元素(不包括倒数第3个元素) print(n[-3:-5:-1]) # 输出倒数第3个元素至倒数第5个元素且步长是-1 print(n[-5::-1]) # 输出倒数第5个元素至最后一个元素且步长是-1运行程序,结果为:
[0 1 2 3 4 5 6 7 8 9]
[0 1 2]
[3 4 5]
[6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 2 4 6 8]
[1 6]
[2 8]
[9 8 7 6 5 4 3 2 1 0]
[9 8]
[7 6]
[5 4 3 2 1 0]
NumPy二维数组索引
二维数组索引可以使用 array[n, m] 的方式表示,以逗号分隔,表示第 n 个数组的第 m 个元素。【实例】创建一个 3 行 4 列的二维数组,实现简单的索引操作,效果如下图所示。

图 3 二维数组索引示意图
程序代码如下:
import numpy as np # 导入numpy模块 # 创建3行4列的二维数组 n=np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]]) print(n[1]) # 输出第2行的元素 print(n[1,2]) # 输出第2行第3列的元素 print(n[-1]) # 输出倒数第1行的元素运行程序,结果如下:
[4 5 6 7]
6
[8 9 10 11]
NumPy二维数组切片式索引
【实例】创建一个二维数组,实现各种切片式索引操作,效果如下图所示:
图 4 二维数组切片式索引示意图
程序代码如下:
import numpy as np # 导入numpy模块 # 创建3行3列的二维数组 n=np.array([[1,2,3],[4,5,6],[7,8,9]]) print(n[:2,1:]) # 输出第1行至第3行(不包括第3行)的第2列至最后一列的元素 print(n[1,:2]) # 输出第2行的第1列至第3列(不包括第3列)的元素 print(n[:2,2]) # 输出第1行至第3行(不包括第3行)的第3列的元素 print(n[:,1:]) # 输出所有行的第1列至第2列(不包括第2列)的元素运行程序,结果如下:
[[2 3]
[5 6]]
[4 5]
[3 6]
[[1]
[4]
[7]]