0Pricing
Learn AI with Python · 课时

索引、切片与花式索引

基本切片、布尔掩码、花式索引,以及使用 np.where() 进行条件选择

索引、切片与花式索引 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

索引基础

NumPy 数组和 Python 列表一样使用从零开始的索引。负索引从末尾开始计数。

import numpy as np
a = np.array([10, 20, 30, 40, 50])
print(a[0])    # 10
print(a[-1])   # 50

一维切片

切片使用 start:stop:step,并返回一个视图(而不是副本),因此修改切片会改变原始数据。

print(a[1:4])    # [20 30 40]
print(a[::2])    # [10 30 50]
view = a[1:3]
view[0] = 99
print(a)         # [10 99 30 40 50]

二维索引 [行, 列]

对于二维数组,请使用一个方括号同时传入两个坐标进行索引:m[row, col]。这种写法比 m[row][col] 更简洁、更快。

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

切片行和列

请使用冒号选取整个轴。m[:, 1] 会选取所有行中的第 1 列。

print(m[0, :])    # first row:    [1 2 3]
print(m[:, 1])    # second col:   [2 5 8]
print(m[1:, :2])  # bottom-left block

布尔掩码

比较会生成一个形状相同的布尔数组。使用该掩码进行索引时,只会保留值为真的位置。

a = np.array([5, 12, 7, 20, 3])
mask = a > 8
print(mask)     # [False  True False  True False]
print(a[mask])  # [12 20]

组合条件

请使用带括号的逐元素运算符 &(与)和 |(或)。Python 关键字 and/or 在数组上不起作用(NOT)。

print(a[(a > 4) & (a < 15)])   # [ 5 12  7]

通过掩码赋值

您可以直接写入掩码选中的位置,从而就地清理数据,例如将异常值限制在上限以内。

a = np.array([5, 12, 7, 20, 3])
a[a > 10] = 10
print(a)   # [ 5 10  7 10  3]

使用数组进行高级索引

传入由整数索引组成的数组(或列表),即可按任意顺序选择任意元素,也可以重复选择。这会返回副本,而不是视图。

a = np.array([10, 20, 30, 40, 50])
idx = [4, 0, 2, 2]
print(a[idx])   # [50 10 30 30]

二维高级索引

提供两个索引数组即可选取指定的(行,列)组合。这里我们选取对角线两端的元素。

m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
rows = [0, 2]
cols = [0, 2]
print(m[rows, cols])   # [1 9]

使用 np.where 进行条件选择

np.where(cond, x, y) 会在条件为真时返回 x 中的元素,否则返回 y 中的元素,相当于向量化的条件分支。

a = np.array([-2, 5, -7, 3])
print(np.where(a < 0, 0, a))   # [0 5 0 3]  (clip negatives)

使用 np.where 查找索引

只传入一个参数时,np.where(cond) 会返回满足条件的位置索引。

a = np.array([10, 20, 30, 40])
print(np.where(a > 15))   # (array([1, 2, 3]),)

快速检查

请测试您的索引技能。

回顾

选择技术:

  • 基本索引和切片(切片是视图)
  • 二维访问 m[row, col],使用 : 选取整个轴
  • 使用 & 和 | 的布尔掩码
  • 使用索引数组进行高级索引(返回副本)
  • 使用 np.where(cond, x, y) 执行向量化条件分支

常见问题解答

「索引、切片与花式索引」课时是免费的吗?

是的 — 「索引、切片与花式索引」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「索引、切片与花式索引」这节课中我会学到什么?

基本切片、布尔掩码、花式索引,以及使用 np.where() 进行条件选择 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「索引、切片与花式索引」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 数组创建与属性
  2. 索引、切片与花式索引
  3. 广播与向量化运算
  4. 使用 NumPy 进行线性代数运算
← 返回 Learn AI with Python