索引、切片与花式索引
基本切片、布尔掩码、花式索引,以及使用 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 反馈 — 无需本地设置。
此课程中的所有课时
- 数组创建与属性
- 索引、切片与花式索引
- 广播与向量化运算
- 使用 NumPy 进行线性代数运算