华为AI机试NumPy速查手册
NumPy速查手册(考试必备)
适用人群:华为AI机试备考者、NumPy初学者、需要快速查阅的开发者
阅读时间:完整阅读约60分钟,快速查阅5分钟
使用建议:先看”从零开始”章节建立基础,再按需查阅具体函数,考前重点背”考场救命代码片段”
零、从零开始:5分钟入门 NumPy 🚀
0.1 什么是 NumPy?
NumPy(Numerical Python)是Python科学计算的基础库,核心是多维数组对象 ndarray。
为什么要用NumPy?
- 快:底层C语言实现,比Python列表快10-100倍
- 省内存:紧凑存储,比列表节省内存
- 方便:向量化操作,一行代码搞定循环
1 | |
0.2 第一个NumPy程序
1 | |
0.3 NumPy vs Python列表
| 特性 | NumPy数组 | Python列表 |
|---|---|---|
| 元素类型 | 必须相同 | 可以不同 |
| 大小 | 创建后固定 | 可动态增长 |
| 运算 | 支持向量化 | 需要循环 |
| 内存 | 连续存储 | 分散存储 |
| 速度 | 快(C实现) | 慢(Python) |
1 | |
0.4 核心概念:轴(axis)
理解axis是掌握NumPy的关键!
1 | |
记忆技巧:
axis=0:想象手指从上往下按,压缩行,留下列axis=1:想象手指从左往右按,压缩列,留下行
0.5 五个最常用操作
1 | |
现在你已经掌握了NumPy的80%基础! 接下来深入学习各个功能。
一、数组创建⭐⭐⭐⭐⭐
1.1 基础创建
np.array() - 从列表/元组创建
参数说明:
object:列表、元组或其他序列dtype:数据类型(可选)ndmin:最小维度数(可选)
1 | |
常见数据类型:
1 | |
常见错误对比:
1 | |
性能优化技巧:
1 | |
1.2 特殊数组创建
np.zeros() - 创建全0数组
参数说明:
shape:数组形状,整数或元组dtype:数据类型,默认float64
1 | |
np.ones() - 创建全1数组
1 | |
np.full() - 创建指定值数组
参数说明:
shape:数组形状fill_value:填充值dtype:数据类型(可选)
1 | |
np.eye() / np.identity() - 单位矩阵
1 | |
np.diag() - 对角矩阵
1 | |
np.empty() - 创建未初始化数组
1 | |
np.zeros_like() / np.ones_like() - 创建同形状数组
1 | |
常见错误对比:
1 | |
性能对比:
1 | |
1.3 序列生成
np.arange() - 等差序列(类似range)
参数说明:
start:起始值(包含),默认0stop:结束值(不包含)step:步长,默认1dtype:数据类型(可选)
1 | |
np.linspace() - 线性等分(指定元素个数)
参数说明:
start:起始值(包含)stop:结束值(包含)num:元素个数,默认50endpoint:是否包含终点,默认Trueretstep:是否返回步长,默认False
1 | |
np.logspace() - 对数等分
参数说明:
start:10^startstop:10^stopnum:元素个数base:底数,默认10
1 | |
np.arange vs np.linspace 对比
1 | |
常见错误对比:
1 | |
性能技巧:
1 | |
1.4 随机数生成⭐⭐⭐⭐⭐
设置随机种子(重要!)
1 | |
np.random.rand() - 均匀分布 [0, 1)
参数说明:传入形状(不是元组!)
1 | |
np.random.randn() - 标准正态分布 N(0,1)
1 | |
np.random.randint() - 随机整数
参数说明:
low:最小值(包含)high:最大值(不包含)size:输出形状
1 | |
np.random.uniform() - 指定范围的均匀分布
参数说明:
low:下界,默认0high:上界,默认1size:输出形状
1 | |
np.random.normal() - 正态分布 N(μ, σ²)
参数说明:
loc:均值μ,默认0scale:标准差σ,默认1size:输出形状
1 | |
np.random.choice() - 随机抽样
参数说明:
a:数组或整数(如果是整数n,从range(n)抽样)size:输出形状replace:是否有放回,默认Truep:每个元素的概率
1 | |
np.random.shuffle() - 随机打乱
1 | |
np.random.permutation() - 返回打乱的副本
1 | |
其他常用分布
1 | |
常见错误对比:
1 | |
性能技巧:
1 | |
机器学习中的随机数应用:
1 | |
二、数组属性与信息⭐⭐⭐⭐⭐
2.1 基本属性
1 | |
2.2 内存与存储
1 | |
2.3 数组类型转换
1 | |
2.4 检查数组信息
1 | |
常见错误:
1 | |
性能技巧:
1 | |
三、数组变形⭐⭐⭐⭐⭐
基础变形
1 | |
维度操作
1 | |
四、数组索引与切片⭐⭐⭐⭐⭐
基础索引
1 | |
多维索引
1 | |
布尔索引⭐⭐⭐⭐⭐
1 | |
花式索引
1 | |
五、数学运算⭐⭐⭐⭐⭐
基础运算(逐元素)
1 | |
数学函数
1 | |
统计函数⭐⭐⭐⭐⭐
1 | |
六、矩阵运算⭐⭐⭐⭐⭐
矩阵乘法
1 | |
线性代数
1 | |
七、广播机制⭐⭐⭐⭐⭐(重点掌握)
7.1 广播规则详解
广播规则:
- 如果两个数组维度数不同,较小维度的数组会在前面补1
- 如果两个数组在某个维度上长度相同或其中一个为1,则兼容
- 如果两个数组在所有维度上都兼容,则可以广播
1 | |
7.2 广播实战案例
案例1:标量广播(最简单)
1 | |
案例2:向量加到矩阵每一行
1 | |
案例3:向量加到矩阵每一列
1 | |
案例4:批量标准化(机器学习常用)
1 | |
案例5:计算欧式距离矩阵
1 | |
案例6:Softmax 函数(数值稳定版)
1 | |
案例7:外积和笛卡尔积
1 | |
案例8:图像批量处理
1 | |
案例9:加权平均(attention机制)
1 | |
案例10:多项式特征生成
1 | |
7.3 广播常见错误与解决
1 | |
7.4 广播性能优化
1 | |
广播记忆口诀:
- 标量到数组:最简单,直接扩展
- 行向量到矩阵:每行都加
- 列向量到矩阵:每列都加(记得reshape成(n, 1))
- 保持维度:用keepdims=True,避免维度丢失
- 外积思维:(n, 1) 和 (1, m) 广播成 (n, m)
八、数组拼接与分割⭐⭐⭐⭐
拼接
1 | |
分割
1 | |
九、条件与逻辑⭐⭐⭐⭐⭐
条件函数
1 | |
逻辑运算
1 | |
判断函数
1 | |
十、排序与查找⭐⭐⭐⭐
排序
1 | |
查找
1 | |
十一、常用技巧⭐⭐⭐⭐⭐
处理NaN和无穷
1 | |
one-hot编码
1 | |
批量处理
1 | |
Softmax实现
1 | |
数据标准化
1 | |
十二、性能优化技巧⭐⭐⭐
向量化 vs 循环
1 | |
内存优化
1 | |
十六、高级技巧与花式操作⭐⭐⭐⭐⭐
16.1 Fancy Indexing(花式索引)进阶
布尔索引的高级应用
1 | |
整数数组索引进阶
1 | |
组合索引技巧
1 | |
16.2 内存视图与副本
1 | |
16.3 结构化数组
1 | |
16.4 高级ufunc技巧
1 | |
16.5 einsum(爱因斯坦求和约定)
1 | |
16.6 性能分析与优化
1 | |
16.7 高级技巧汇总
1 | |
十七、考场救命代码片段 🎯(必背!)
17.1 创建与初始化(6个)
1 | |
17.2 形状操作(5个)
1 | |
17.3 索引与筛选(5个)
1 | |
17.4 统计与计算(5个)
1 | |
17.5 矩阵运算(5个)
1 | |
17.6 机器学习常用(9个)
1 | |
17.7 调试与检查(5个)
1 | |
17.8 考场模板(完整示例)
1 | |
考前checklist:
- 记住
np.random.seed(42) - 熟练使用
reshape(-1, n) - 掌握axis参数(0=列,1=行)
- 会用
keepdims=True - 记住广播规则
- 熟练布尔索引
arr[arr > 0] - 会写softmax和sigmoid
- 掌握矩阵乘法
@ - 会算欧式距离(广播版)
- 记住
+1e-8防止除零
十八、向量化优化实战:慢版本 vs 快版本 ⚡
18.1 距离计算优化
1 | |
18.2 滑动窗口统计优化
1 | |
18.3 条件计数优化
1 | |
18.4 多项式特征生成优化
1 | |
18.5 图像卷积优化
1 | |
18.6 K-means迭代优化
1 | |
18.7 协方差矩阵计算优化
1 | |
18.8 向量化优化总结
优化原则:
- 消除显式循环:用NumPy数组操作替代Python循环
- 使用广播:避免手动扩展数组
- 利用矩阵运算:
@比循环快得多 - 用内置函数:NumPy的C实现比Python快
- 预分配内存:避免动态增长数组
- 批量操作:一次处理多个元素
常见模式:
1 | |
十九、机器学习中的NumPy实战 🤖
19.1 线性回归完整实现
1 | |
19.2 逻辑回归实现
1 | |
19.3 K-NN分类器
1 | |
19.4 主成分分析 (PCA)
1 | |
19.5 朴素贝叶斯分类器
1 | |
二十、内存管理与性能优化技巧 💾
20.1 内存使用分析
1 | |
20.2 视图 vs 副本性能
1 | |
20.3 原地操作优化
1 | |
20.4 内存池与预分配
1 | |
20.5 缓存友好的访问模式
1 | |
20.6 减少临时数组
1 | |
20.7 数值稳定性技巧
1 | |
二十一、常见陷阱与调试技巧 🐛
21.1 常见错误汇总
1 | |
21.2 调试技巧
1 | |
21.3 性能分析
1 | |
二十二、快速查找表 📚
22.1 创建数组速查
| 需求 | 代码 |
|---|---|
| 从列表创建 | np.array([1,2,3]) |
| 全0 | np.zeros((3,4)) |
| 全1 | np.ones((3,4)) |
| 填充值 | np.full((3,4), 7) |
| 单位矩阵 | np.eye(3) |
| 等差序列 | np.arange(0, 10, 2) |
| 线性等分 | np.linspace(0, 1, 11) |
| 标准正态 | np.random.randn(3,4) |
| 均匀分布 | np.random.rand(3,4) |
| 随机整数 | np.random.randint(0,10,size=5) |
22.2 形状操作速查
| 需求 | 代码 |
|---|---|
| 重塑 | arr.reshape(3,4) 或 arr.reshape(-1,4) |
| 展平 | arr.ravel() 或 arr.flatten() |
| 转置 | arr.T |
| 增加维度 | arr[np.newaxis,:] 或 arr[:,None] |
| 删除维度 | np.squeeze(arr) |
| 垂直拼接 | np.vstack([a,b]) |
| 水平拼接 | np.hstack([a,b]) |
| 重复 | np.repeat(arr, 3) |
| 平铺 | np.tile(arr, (2,3)) |
22.3 索引切片速查
| 需求 | 代码 |
|---|---|
| 基本索引 | arr[0], arr[-1] |
| 切片 | arr[1:5], arr[::2] |
| 布尔索引 | arr[arr > 0] |
| 多条件 | arr[(arr>0) & (arr<10)] |
| where替换 | np.where(arr>0, arr, 0) |
| 花式索引 | arr[[0,2,4]] |
| 网格索引 | arr[rows[:,None], cols] |
22.4 统计函数速查
| 需求 | 代码 |
|---|---|
| 求和 | np.sum(arr, axis=0) |
| 均值 | np.mean(arr, axis=0) |
| 标准差 | np.std(arr, axis=0) |
| 方差 | np.var(arr) |
| 最小/最大 | np.min(arr), np.max(arr) |
| 最小/最大索引 | np.argmin(arr), np.argmax(arr) |
| 中位数 | np.median(arr) |
| 分位数 | np.percentile(arr, 25) |
| 唯一值 | np.unique(arr) |
| 计数 | np.bincount(arr) |
22.5 数学运算速查
| 需求 | 代码 |
|---|---|
| 加减乘除 | a+b, a-b, a*b, a/b |
| 幂运算 | a**2 或 np.power(a,2) |
| 平方根 | np.sqrt(arr) |
| 指数 | np.exp(arr) |
| 对数 | np.log(arr) |
| 绝对值 | np.abs(arr) |
| 取整 | np.floor(arr), np.ceil(arr), np.round(arr) |
| 裁剪 | np.clip(arr, 0, 1) |
| 符号 | np.sign(arr) |
22.6 线性代数速查
| 需求 | 代码 |
|---|---|
| 矩阵乘法 | A @ B 或 np.dot(A,B) |
| 内积 | np.dot(a,b) |
| 外积 | np.outer(a,b) |
| 逆矩阵 | np.linalg.inv(A) |
| 行列式 | np.linalg.det(A) |
| 特征值 | np.linalg.eig(A) |
| 范数 | np.linalg.norm(A) |
| 解方程 | np.linalg.solve(A,b) |
| 迹 | np.trace(A) |
| 秩 | np.linalg.matrix_rank(A) |
二十三、考前最后冲刺 🏃
必背公式
1 | |
考场checklist
开始答题前:
-
import numpy as np -
np.random.seed(42)(如果需要随机数) - 读懂题目要求的输入输出格式
编码时:
- 检查数组形状:
print(arr.shape) - 确认axis参数:axis=0是列,axis=1是行
- 使用keepdims避免维度丢失
- 加1e-8防止除零
- 用np.clip防止数值溢出
提交前:
- 测试边界情况(空数组、单个元素等)
- 检查是否有NaN或Inf:
np.isnan().any() - 验证输出形状和类型
- 确认结果在合理范围内
时间分配建议
- 5分钟:理解题目,确定思路
- 15分钟:写主要逻辑
- 5分钟:测试和调试
- 5分钟:优化和检查
常见题型模板
分类问题:
1 | |
聚类问题:
1 | |
祝你考试顺利!记住:NumPy的核心是向量化,避免循环就成功了一半! 💪
相关资源:
继续学习:
- 下一篇:华为AI机试-Pandas速查
- 推荐:华为AI机试-真题解析
错误1:维度不匹配
1 | |
错误2:整数除法
1 | |
错误3:原地修改
1 | |
调试技巧
1 | |
十五、快速参考表📋
| 操作 | 代码 |
|---|---|
| 创建数组 | np.array([1,2,3]) |
| 全0/全1 | np.zeros((2,3)), np.ones((2,3)) |
| 单位矩阵 | np.eye(3) |
| 随机数 | np.random.randn(3,4) |
| 重塑 | arr.reshape(3,4) |
| 转置 | arr.T |
| 求和 | np.sum(arr, axis=0) |
| 均值 | np.mean(arr) |
| 最大/最小 | np.max(arr), np.argmax(arr) |
| 矩阵乘法 | A @ B 或 np.dot(A,B) |
| 逐元素乘 | A * B |
| 条件选择 | np.where(cond, x, y) |
| 排序 | np.sort(arr), np.argsort(arr) |
| 唯一值 | np.unique(arr) |
| 拼接 | np.vstack(), np.hstack() |
| 裁剪 | np.clip(arr, min, max) |
考前必做:
- 手敲一遍所有”考试必背代码片段”
- 记住常用函数的axis参数含义
- 练习3道完整的NumPy算法题
祝考试顺利!💪
下一篇:真题模拟练习
华为AI机试NumPy速查手册
https://whyalwaysme.lol/2026/09/01/华为AI机试-NumPy速查/