返回首页

Roadmap

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 代码读得很痛苦,想把「为什么这样写」搞清楚。

学习前需要准备#

  1. 一个 Python 环境,建议 Python 3.9 及以上;

  2. 装好 NumPy:

    pip install numpy
  3. 一个编辑器。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 列的二维数组,每一行是一个城市,每一列是一个季度。

怎么用这门课#

别一口气读完五个章节。更实在的做法是:

  1. 打开一个 Notebook,把例子抄进去,真的跑一遍;
  2. 看到输出和文章里写的不一样,停下来查清楚为什么;
  3. 做第 X.2 节的练习,先别看答案,卡住了再看;
  4. 第 X.3 节不用通读,等你真的被某个问题绊倒时再回来查。

一个提醒 NumPy 的函数很多,但日常真正高频用的就二十来个。这门课只讲这些。遇到课程里没讲的函数时,先别急着背 API,直接去官方文档搜一下关键词——通常五秒钟就能找到答案。

和 Pandas 的关系#

如果你已经学过本站的 Pandas 实战课程,可以把两者这样对上号:

你要做的事PandasNumPy
存一张表DataFramenp.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 把连续数值量化成离散区间、把一维序列切成一个个数据帧,以及 …