NumPy 数组计算实战#
这门课是给谁上的#
如果你刚学会 Python,你会写 for 循环、知道列表能存一堆数字。然后你打开一份机器学习代码,看到这样的东西:
scores = (x - x.mean(axis=0)) / x.std(axis=0) # 这行到底在干嘛?一行代码,没有循环,但你看不懂它在干嘛。
NumPy 就是这套「没有循环的写法」的地基。 机器学习、深度学习、数据分析里那些 np. 开头的函数,底层全是它。学不会 NumPy,后面所有库都只能当黑盒调用。
好消息是:NumPy 的核心用法其实很少。 真正天天用的就二十来个函数,剩下的是查文档的事。这门课就把这二十来个拆成 5 章,每章 5 道练习 + 10 个常见问题。
适合谁#
- 刚学完 Python 基础(会写列表、循环、函数),但没用过 NumPy;
- 学过一点 NumPy,能跑通示例,但说不清
axis=0和axis=1到底差在哪; - 读别人写的 NumPy 代码读得很痛苦,想把「为什么这样写」搞清楚。
学习前需要准备#
一个 Python 环境,建议 Python 3.9 及以上;
装好 NumPy:
pip install numpy一个编辑器。Jupyter Notebook 最适合跟着本文敲——每写一格立刻看到结果。
不想装环境? 用 Google Colab 在线运行,打开就能用,NumPy 已经预装好了。
课程结构#
| 章节 | 主题 | 你会学到 |
|---|---|---|
| 第 1 章 | 数组创建 | 从列表造数组、全零全一、arange/linspace、随机数、reshape 变形 |
| 第 2 章 | 索引与切片 | 基础索引、切片、Fancy Indexing、布尔掩码、视图与副本的陷阱 |
| 第 3 章 | 广播机制 | 外和、按行/按列缩放、两两差值、按列归一化 |
| 第 4 章 | 向量化运算 | 归一化差值、角度特征、聚合统计、sort/argsort、范数门控变换 |
| 第 5 章 | 数组实用工具 | 极值提取、缩尾处理、数值量化与分帧、tile/diff、拼接与相关性 |
每一章都拆成三节,按同一个顺序组织:
- 第 X.1 节 核心知识点:把这一章要用的函数讲清楚,配可运行代码;
- 第 X.2 节 编程练习:5 道动手题,先自己写,再看答案;
- 第 X.3 节 常见问题:10 个初学者最容易踩的坑,附解答。
想直接开始某一章的核心知识点,也可以从这里进:
一个贯穿全课程的例子#
为了让你不用反复换数据集,全课程都用同一张「城市 × 季度销售额」表。你在第 1 章把它建出来,后面 4 章一直用它:
import numpy as np
# 5 个城市 × 4 个季度的销售额(万元)
sales = np.array([
[120.0, 135.0, 150.0, 165.0],
[ 80.0, 92.0, 88.0, 105.0],
[200.0, 210.0, 195.0, 230.0],
[ 60.0, 72.0, 85.0, 78.0],
[150.0, 145.0, 160.0, 175.0],
])
city_names = np.array(["北京", "上海", "广州", "深圳", "成都"])
quarter_names = np.array(["Q1", "Q2", "Q3", "Q4"])就这么几行代码,就是你接下来要折腾的对象。它是一个 5 行 4 列的二维数组,每一行是一个城市,每一列是一个季度。
怎么用这门课#
别一口气读完五个章节。更实在的做法是:
- 打开一个 Notebook,把例子抄进去,真的跑一遍;
- 看到输出和文章里写的不一样,停下来查清楚为什么;
- 做第 X.2 节的练习,先别看答案,卡住了再看;
- 第 X.3 节不用通读,等你真的被某个问题绊倒时再回来查。
一个提醒 NumPy 的函数很多,但日常真正高频用的就二十来个。这门课只讲这些。遇到课程里没讲的函数时,先别急着背 API,直接去官方文档搜一下关键词——通常五秒钟就能找到答案。
和 Pandas 的关系#
如果你已经学过本站的 Pandas 实战课程,可以把两者这样对上号:
| 你要做的事 | Pandas | NumPy |
|---|---|---|
| 存一张表 | DataFrame | np.ndarray(只有数字,没有列名) |
| 按条件取数据 | df[df["销量"] > 3] | arr[arr > 3] |
| 按行/列汇总 | df.groupby(...) | arr.sum(axis=0) |
| 表格运算 | 直接乘 | 靠广播对齐形状 |
一句话:Pandas 管「有标签的表格」,NumPy 管「纯数字的矩阵」。 机器学习里两者都要用:数据清洗用 Pandas,模型内部的计算用 NumPy。
官方文档#
章节导航
第 1 章介绍 NumPy 数组的创建方式:如何从 Python 列表创建数组、如何创建全零全一数组、如何用 arange 和 linspace 生成数值序列、如何生成随机数组,以及如何用 reshape 调整数组形状。
第 2 章讲解 NumPy 中从数组取数据的四种方式:基础索引与切片、Fancy Indexing 高级索引、布尔掩码筛选、条件的提取,以及数组修改时视图与副本的经典陷阱。
第 3 章讲解 NumPy 的广播机制:从外和运算开始,逐步掌握按行缩放、两两差值、按列缩放和按列归一化这 5 个最常用的广播场景,理解形状不同的数组为什么能直接相乘,以及广播的三条匹配规则。
第 4 章讲解 NumPy 的向量化运算:为什么用数组算比用 for 循环快、从循环到向量化的写法转变、归一化差值与角度特征这类特征构造、聚合统计函数、sort 与 argsort,以及基于向量范数的门控线性变换。
第 5 章讲解 NumPy 的数组实用工具:提取每行极值及其对应名字、用分位数做缩尾处理防止极端值影响、用 np.digitize 把连续数值量化成离散区间、把一维序列切成一个个数据帧,以及 …