第 46 课 · 阶段八 · 项目实战
NumPy 数值计算
NumPy 是数值计算引擎,pandas、机器学习框架都建立在它之上。这一课掌握 ndarray 数组、向量化运算与高级索引。
🎯 学完本课你将掌握
- 创建 ndarray 数组
- 理解向量化运算(告别 for 循环)
- 掌握索引、切片与广播
- 会用常用数学与统计函数
一、安装
安装
1pip install numpy二、创建数组
创建数组.py
1import numpy as np23a = np.array([1, 2, 3, 4, 5]) # 一维数组4b = np.array([[1, 2], [3, 4]]) # 二维数组5print(a)6print(b)7print(a.shape) # (5,) 形状8print(b.shape) # (2, 2)9print(a.ndim) # 维度数10print(a.dtype) # 元素类型 int64三、特殊数组
特殊数组.py
1import numpy as np2print(np.zeros(3)) # [0. 0. 0.]3print(np.ones((2, 2))) # 2x2 全14print(np.arange(0, 10, 2)) # [0 2 4 6 8] 类似 range5print(np.linspace(0, 1, 5)) # [0. 0.25 0.5 0.75 1.] 等分6print(np.random.rand(3)) # 0-1 随机3个数四、向量化运算:核心优势
对数组整体做运算,自动应用到每个元素,比 Python for 循环快几十上百倍。
向量化.py
1import numpy as np2a = np.array([1, 2, 3, 4])3print(a + 10) # [11 12 13 14]4print(a * 2) # [ 2 4 6 8]5print(a ** 2) # [ 1 4 9 16]6print(np.sqrt(a)) # 开方7print(a[a > 2]) # [3 4] 布尔索引筛选五、索引与切片
索引切片.py
1import numpy as np2a = np.arange(10)3print(a[2]) # 24print(a[2:5]) # [2 3 4]5print(a[::-1]) # 反转67b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])8print(b[1, 2]) # 6 第1行第2列9print(b[:, 1]) # [2 5 8] 所有行的第1列10print(b[0, :]) # [1 2 3] 第一行六、统计与数学函数
统计.py
1import numpy as np2a = np.array([3, 1, 4, 1, 5, 9, 2, 6])3print(a.sum()) # 314print(a.mean()) # 平均值5print(a.max(), a.min()) # 9 16print(a.std()) # 标准差7print(np.sort(a)) # 排序(返回新数组)七、广播机制
不同形状的数组也能运算:小数组会自动“扩展”到大数组的形状。
广播.py
1import numpy as np2a = np.array([[1, 2], [3, 4]])3b = np.array([10, 20])4print(a + b) # [[11 22] [13 24]] b自动扩展到每行八、常见错误与解决
常见错误与解决
| 错误现象 | 原因 / 解决方法 |
|---|---|
形状不一致无法广播 | 检查 shape,用 reshape 调整;加 np.newaxis 增加维度。 |
用列表混合类型出错 | np.array([1, "a"]) 会变成字符串数组,保持同类型。 |
与 Python 列表混淆 | 列表的 + 是拼接、数组的 + 是逐元素相加,注意区分。 |
✍️ 小练习
创建一个 4x4 随机数组:计算整体均值、每行均值、取出第 2 行第 3 列、把大于 0.5 的元素替换为 1。
📌 本节小结
NumPy 三件宝:ndarray 数组(shape/dtype)、向量化运算(快)、广播机制(灵活)。它是 pandas 与机器学习的地基,值得重点掌握。