Day 079 — NumPy 基础:完成清单与练习题
✅ 今日完成清单
- [ ] 理解 NumPy 相比 Python 列表的性能优势
- [ ] 掌握 ndarray 的创建方法(array, zeros, ones, arange, linspace)
- [ ] 熟悉数组属性(shape, ndim, size, dtype)
- [ ] 掌握一维/二维数组索引与切片
- [ ] 理解布尔索引的用法
- [ ] 理解广播机制的规则
- [ ] 掌握常用统计函数(mean, std, sum, min, max)
- [ ] 掌握矩阵运算(@, inv, det, solve)
- [ ] 了解视图 vs 副本的区别
- [ ] 运行并理解所有代码示例
📝 练习题
基础题
练习 1:数组创建与属性
创建一个 5x5 的数组,值为 1 到 25。然后: 1. 打印其 shape、ndim、size、dtype 2. 计算所有元素的总和 3. 计算每一行的均值 4. 计算每一列的标准差
python
import numpy as np
# 你的代码
练习 2:索引与切片
给定数组:
python
arr = np.array([[10, 20, 30, 40, 50],
[60, 70, 80, 90, 100],
[110, 120, 130, 140, 150]])
提取: 1. 第 2 行所有元素 2. 第 1 列所有元素 3. 右上角 2x2 子矩阵 4. 所有大于 100 的元素
练习 3:布尔索引
给定数组:
python
scores = np.array([85, 92, 78, 95, 88, 60, 73, 89, 91, 82])
- 找出所有大于 90 分的成绩
- 计算大于 80 分的学生比例
- 将所有不及格(<60)的成绩替换为 60
进阶题
练习 4:数据标准化
实现一个函数,将一维数组标准化为均值为 0、标准差为 1 的分布:
标准化公式: (x - mean) / std
python
def standardize(arr):
# 你的代码
pass
data = np.array([10, 20, 30, 40, 50])
result = standardize(data)
print(result) # 应该均值约 0,标准差约 1
练习 5:矩阵应用
A 班 30 人,B 班 25 人,两班 5 门课的成绩如下:
python
# A班成绩 (30人 x 5门课)
np.random.seed(10)
A_grades = np.random.randint(60, 100, (30, 5))
# B班成绩 (25人 x 5门课)
B_grades = np.random.randint(60, 100, (25, 5))
请回答: 1. 每个班每门课的平均分 2. 哪个班的总体平均分更高? 3. 哪门课两个班的差异最大?(计算差值的标准差) 4. 找出 A 班每门课的最高分学生编号
练习 6:性能对比
比较以下三种方式计算平方和的性能:
python
import numpy as np
import time
n = 1_000_000
arr = np.arange(n)
# 方式A: 纯 Python 循环
# 方式B: 列表推导式
# 方式C: NumPy 向量化
# 测量并比较三种方式的耗时
💡 提示
- 使用
np.random.seed(42)固定随机种子以获得可复现结果 - 布尔索引中使用
&和|,不要用and和or axis=0表示沿行操作(压缩行),axis=1表示沿列操作(压缩列)- 遇到不确定的函数,使用
help(np.function_name)查看文档
完成练习后,回顾 README.md 中的概念,确保理解每个知识点。