Numpy学习3-数组切片

几乎所有高级功能都依赖切片操作,它是高效处理大规模数值数据的基础技能,掌握切片,才能真正驾驭数组。

本文列出一维、二维、三维数组切片,作为记录和备查。

文中表格示例使用AI生成。

1、记住要点

  • 切片返回原数组的视图(共享内存)
  • 修改切片会影响原数组
  • 需要副本使用copy()

2、一维数组切片

语法

python 复制代码
# 一维数组
arr[start:stop:step]
  • start:起始索引(包含),默认为0

  • stop:结束索引(不包含),默认为数组长度

  • step:步长,默认为1(可为负数,表示逆序)

    创建一个一维数组

    arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

操作目的 切片语法 示例代码 输出结果
取前 n 个元素 arr[:n] arr[:5] [0 1 2 3 4]
取后 n 个元素 arr[-n:] arr[-3:] [5 6 7 8 9]
取中间某段 arr[start:end] arr[2:8] [2 3 4 5 6 7]
跳着取元素(步长) arr[::step] arr[::2] [0 2 4 6 8]
反转整个数组 arr[::-1] arr[::-1] [9 8 7 6 5 4 3 2 1 0]
倒序取一段 arr[start:end:-1] arr[5:2:-1] [5 4 3]
去掉最后一个元素 arr[:-1] arr[:-1] [0 1 2 3 4 5 6 7 8]
去掉头尾 arr[1:-1] arr[1:-1] [1 2 3 4 5 6 7 8]
取偶数索引元素 arr[::2] arr[::2] [0 2 4 6 8]
取奇数索引元素 arr[1::2] arr[1::2] [1 3 5 7 9]
条件筛选(大于某值) arr[arr > x] arr[arr > 5] [6 7 8 9]
按指定下标提取 arr[indices] arr[[1,5,7]] [1,5,7]

3、二维数组切片

复制代码
arr = np.array([[1,  2,  3,  4],
                [5,  6,  7,  8],
                [9, 10, 11, 12]])

arr[行切片, 列切片]
操作目的 切片语法 示例代码 输出结果
获取某一行 arr[row, :]arr[row] arr[1] [5 6 7 8]
获取某一列 arr[:, col] arr[:, 2] [3 7 11]
获取连续多行 arr[r1:r2, :] arr[0:2, :] [[1 2 3 4], [5 6 7 8]]
获取连续多列 arr[:, c1:c2] arr[:, 1:3] [[2 3], [6 7], [10 11]]
提取子矩阵 arr[r1:r2, c1:c2] arr[1:, 2:] [[7 8], [11 12]]
跳着取行和列 arr[::step_r, ::step_c] arr[::2, ::2] [[1 3], [9 11]]
反转所有行 arr[::-1, :] arr[::-1] [[9 10 11 12], [5 6 7 8], [1 2 3 4]]
反转所有列 arr[:, ::-1] arr[:, ::-1] [[ 4 3 2 1] [ 8 7 6 5] [12 11 10 9]]
反转行列 arr[::-1, ::-1] arr[::-1, ::-1] [[12 11 10 9] [ 8 7 6 5] [ 4 3 2 1]]
获取前 N 行 arr[:n, :] arr[:2, :] [[1 2 3 4] [5 6 7 8]]
获取后 N 行 arr[-n:, :] arr[-2:, :] [[ 5 6 7 8] [ 9 10 11 12]]
获取前 N 列 arr[:, :n] arr[:, :3] [[ 1 2 3] [ 5 6 7] [ 9 10 11]]
获取后 N 列 arr[:, -n:] arr[:, -2:] [[ 3 4] [ 7 8] [11 12]]
条件切片(布尔索引) arr[arr > x] arr[arr > 5] [6 7 8 9 10 11 12]
按行条件筛选 需结合 np.any() / np.all() arr[np.any(arr > 10, axis=1)] [[ 9 10 11 12]]
花式索引取特定行 arr[[i, j, k], :] arr[[0, 2], :] [[ 1 2 3 4] [ 9 10 11 12]]
花式索引取特定列 arr[:, [i, j]] arr[:, [1, 3]] [[ 2 4] [ 6 8] [10 12]]
同时取指定行列 arr[[r1,r2], [c1,c2]] arr[[0,1], [1,2]] [2 7]

4、三维数组切片

三维数组可以看作由多个二维数组(矩阵)组成的数组。一个形状为 (d, h, w) 的三维数组:

  • d:深度(层数)

  • h:高度(行数)

  • w:宽度(列数)

    arr = np.array([[[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]],
    [[12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23]]])

层0(第一层)

┌──────

│ 0 1 2 3

│ 4 5 6 7

│ 8 9 10 11

└───────

层1(第二层)

┌────────

│ 12 13 14 15

│ 16 17 18 19

│ 20 21 22 23

└────────

操作目的 切片语法 示例代码 输出结果
获取整个数组 [:, :, :] 或 ... arr[:, :, :] 整个数组
获取第一层(第一个二维数组) [0, :, :] 或 [0, ...] arr[0, :, :] [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]
获取第二层(第二个二维数组) [1, :, :] 或 [1, ...] arr[1, ...] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]
获取所有层的第一行 [:, 0, :] arr[:, 0, :] [[ 0 1 2 3] [12 13 14 15]]
获取所有层的第二列 [:, :, 1] arr[:, :, 1] [[ 1 5 9] [13 17 21]]
反转所有层的行 [:, ::-1, :] arr[:, ::-1, :] [[[ 8 9 10 11] [ 4 5 6 7] [ 0 1 2 3]] [[20 21 22 23] [16 17 18 19] [12 13 14 15]]]
相关推荐
与代码不die不休12 小时前
Numpy学习——ndarray的属性
学习·numpy
看到代码就头晕14 小时前
尚硅谷numpy的学习
numpy
一招定胜负2 天前
机器学习预备知识:numpy、pandas、matplotlib库
人工智能·机器学习·numpy
Maxwell_li14 天前
Pandas 描述分析和分组分析学习文档
学习·数据分析·numpy·pandas·matplotlib
Maxwell_li14 天前
pandas数据合并
机器学习·数据分析·numpy·pandas·matplotlib
爱打代码的小林4 天前
numpy库数组笔记
笔记·python·numpy
CClaris4 天前
手撕 LSTM:用 NumPy 从零实现 LSTM 前向传播
人工智能·numpy·lstm
我是哈哈hh5 天前
【Python数据分析】Numpy总结
开发语言·python·数据挖掘·数据分析·numpy·python数据分析
编程设计3666 天前
Numpy核心功能简易代码
numpy