结业考核
这是本书过程化考核的最后一环,由两部分组成:综合项目与结业测验。全部完成后,你应当能脱离任何 AI 工具独立使用 NumPy 处理数值数据,并读懂、验证 AI 生成的代码——这正是本书的两个核心目标。
一、综合项目
从下面三个主题中任选一个,独立完成。也可以自拟同等难度的主题,但必须先按 12.6 的审查清单自评。
主题 A:气温数据分析工具
- 从 CSV 读入 3 个城市 30 天的气温数据(自行生成,混入 2~3 个 ±99 异常值)。
- 清洗:把异常值替换为 nan。
- 输出:各城市平均气温、最高气温、气温标准差;找出气温波动最大的城市。
- 把结果写成带表头的 CSV 报告。
主题 B:图像处理小工具
- 生成一个 100×100×3 的随机彩色图像(或读入一张真实图片)。
- 支持:提亮/变暗(加减灰度并 clip)、反色、灰度化(按通道平均)、二值化(阈值处理)。
- 每个操作封装成一个函数,输入输出都是
ndarray,注意 dtype 溢出问题。 - 输出处理前后的图像数组范围(min/max)与形状,验证结果合理。
主题 C:蒙特卡洛估算器
- 用蒙特卡洛方法估算 π(正方形内撒点法)。
- 分别用 N = 10³、10⁴、10⁵、10⁶ 运行,输出每次的估算值与相对误差。
- 用固定种子保证可复现;把结果整理成表格(可用
savetxt保存)。 - 附加(可选):用同样的方法估算 ∫₀¹ x² dx。
统一验收标准(全部满足才算通过):
| 标准 | 说明 |
|---|---|
| 可运行 | 按 README 或注释说明可一键运行,无语法错误 |
| 有注释 | 关键函数有注释,说明「为什么」 |
| 有容错 | 空文件、缺失值、异常值不会导致程序崩溃 |
| 结构清晰 | 用函数组织代码,没有大段重复 |
| 向量化 | 核心运算用数组运算,不写逐元素 Python 循环 |
| 通过边界测试 | 常数列、全缺失、极端值下行为正确 |
二、结业测验
覆盖第 1~12 章知识点,共 15 题,答对 12 题(80%)以上视为通过。
np.array([1, 2, 3]).shape的结果是?(第 1 章)- A.
3 - B.
(3,) - C.
(1, 3) - D.
[3]
- A.
np.zeros((2, 3)).shape的结果是?(第 2 章)- A.
(2, 3) - B.
(3, 2) - C.
(6,) - D.
(2,)
- A.
np.arange(2, 10, 2)的结果是?(第 2 章)- A.
[2, 4, 6, 8, 10] - B.
[2, 4, 6, 8] - C.
[2, 4, 6] - D.
[2, 3, 4, 5]
- A.
np.arange(10)[1:4]的结果是?(第 3 章)- A.
[1, 2, 3, 4] - B.
[1, 2, 3] - C.
[0, 1, 2] - D.
[2, 3, 4]
- A.
- 下列哪种方式得到的是视图(修改它会影响原数组)?(第 3 章)
- A.
a.copy() - B.
a[1:3] - C.
np.array(a) - D.
a.flatten()
- A.
np.array([1, 2, 3]) * 2的结果是?(第 4 章)- A.
[1, 2, 3, 1, 2, 3] - B.
[2, 4, 6] - C.
2 - D. 报错
- A.
np.array([1, 2, 3, 4, 5]).mean()的结果是?(第 6 章)- A.
15 - B.
3.0 - C.
2.5 - D.
5
- A.
a = np.array([[1, 2], [3, 4]]); a.sum(axis=0)的结果是?(第 6 章)- A.
[4, 6] - B.
[3, 7] - C.
10 - D.
[1, 2, 3, 4]
- A.
- 形状
(2, 3)与(3,)的数组相加,结果形状是?(第 7 章)- A.
(2,) - B.
(2, 3) - C.
(3, 2) - D. 报错
- A.
np.array([1, 2, 3, 4])[(np.array([1, 2, 3, 4]) % 2 == 0)]的结果是?(第 8 章)- A.
[1, 3] - B.
[2, 4] - C.
[1, 2, 3, 4] - D.
[False, True, False, True]
- A.
np.loadtxt("a.csv", delimiter=",")读回的数据默认 dtype 是?(第 9 章)- A.
int64 - B.
float64 - C.
str - D.
bool
- A.
- 矩阵乘法应使用哪个运算符?(第 10 章)
- A.
* - B.
@ - C.
& - D.
#
- A.
- 解方程组
2x + y = 5、x + 3y = 10,正确写法是?(第 10 章)- A.
np.linalg.inv(A) * b - B.
np.linalg.solve(A, b) - C.
A @ b - D.
np.dot(A, b)
- A.
rng = np.random.default_rng(42)的作用是?(第 11 章)- A. 让随机数更快
- B. 固定种子,结果可复现
- C. 让随机数更均匀
- D. 清除所有随机数
- 阅读 AI 生成的 NumPy 代码,正确的态度是?(第 12 章)
- A. 直接使用并信任
- B. 理解、验证、修改后再使用
- C. 一律不用
- D. 只看注释
三、结业评审
- 综合项目:对照验收标准逐条自评;如果可能,请另一位同学或老师运行你的程序。
- 结业测验:15 题答对 12 题以上。
- 两项都通过,即完成本书全部学习目标。
结业后的下一步
本书覆盖的是 NumPy 核心。之后可以按兴趣深入:
- 数据分析:
pandas(基于 NumPy 的数据表工具)、matplotlib(绘图可视化) - 科学计算:
scipy(优化、积分、信号处理) - 机器学习:
scikit-learn、PyTorch(底层数据结构都离不开 ndarray) - 图像与信号:
opencv、PIL(第 12 章的图像操作是起点)
无论选哪个方向,记住本书的两条原则:独立写出能跑的向量化代码,读懂并验证别人(包括 AI)写的代码。
