NumPy 数组切片

在 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 的元素。

上一篇: NumPy 随机数组

下一篇: NumPy 数组分割

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号