在 NumPy 中,我们也可以使用 “切片” 的方式来截取数组的一部分。
语法:
array[start:stop:step]说明:
数组切片语法接收以下 3 个参数。
start(可选,默认值:0):切片的起始下标(包含)。stop(可选,默认值:数组长度):切片的结束下标(不包含)。step(可选,默认值:1):切片的步长。
提示: 如果小伙伴们对 Python 列表切片了解不够透彻,另请参阅:Python 列表切片。
示例 1:NumPy 一维数组切片
import numpy as np
arr = np.arange(10, 20, 2)
print(arr)
print(arr[1:3])运行结果如下。
[10 12 14 16 18]
[12 14]分析:
np.arange(10, 20, 2) 得到的结果是 [10 12 14 16 18]。arr[1:3] 表示截取的范围是 [1,3),也就是包含 1 但不包含 3。
一维数组的切片和一维列表的切片是一样的,接下来我们再来看一下二维数组的切片又是怎样的。
示例 2:NumPy 二维数组切片
import numpy as np
arr = np.arange(10, 30).reshape(5, 4)
print(arr)
print(arr[0, :])运行结果如下。
[[10 11 12 13]
[14 15 16 17]
[18 19 20 21]
[22 23 24 25]
[26 27 28 29]]
[10 11 12 13]分析:
np.arange(10, 30) 用于创建一个 20 个元素的一维数组,reshape() 这个方法用于改变数组的形状,此时就变成 5 × 4 的二维数组了。对于 reshape() 方法,我们在下一节中会详细介绍。
对于二维数组,切片的语法依然适用,但是行和列需要分别定义。比如我们想要获取第 1 行的所有元素,可以像下面这样来写。
arr[0, :]如果想要获取第 1 列的所有元素,可以像下面这样来写。
arr[:, 0]如果想要获取第 1 行中的第 2 至第 4 个元素(注意左闭右开),可以像下面这样来写。
arr[0, 1: 4]如果想要获取第 1 行至第 3 行,以及第 1 列至第 3 列的矩阵元素,可以像下面这样来写。
arr[0:3, 0:3]对于切片这种方式,小伙伴们自行用笔和纸画一下图,其实是非常容易理解的。
示例 3:NumPy 多维数组切片
import numpy as np
arr = np.arange(10, 22).reshape(2, 3, 2)
print(arr)
print(arr[0,...])
print(arr[..., 0])运行结果如下。
[[[10 11]
[12 13]
[14 15]]
[[16 17]
[18 19]
[20 21]]]
[[10 11]
[12 13]
[14 15]]
[[10 12 14]
[16 18 20]]分析:
NumPy 支持使用 “...”(三个点号)的方式来表示剩余的所有维度。对于 arr (这是一个三维数组)来说,arr[0, ...] 等价于 arr[0, :, :],它表示选取第一个维度索引为 0 的所有元素。而 arr[..., 0] 等价于 arr[:, :, 0],表示选取所有维度上最后一个索引为 0 的元素。
