人工智能之数据分析 numpy
第十四章 知识总结
@
目录
- 人工智能之数据分析 numpy
- 前言
- 🧱 一、基础核心:
ndarray(N 维数组)- 🔢 二、数组创建
- 📐 三、形状操作(Shape Manipulation)
- 🔗 四、数组连接与分割
- 🔄 五、广播机制(Broadcasting)
- ➕ 六、数组运算
- 1. 算术运算(逐元素)
- 2. 比较与逻辑
- 3. 位运算(整数)
- 4. 通用函数(ufunc)
- 🧮 七、聚合与统计
- 🔍 八、排序与筛选
- 排序
- 筛选(布尔索引)
- 条件选择
- 🧩 九、特殊数组类型
- 1. 结构化数组(Structured Arrays)
- 2. 记录数组(Record Arrays)
- 3. 矩阵(Matrix)
- 🧮 十、线性代数(
numpy.linalg)- 💾 十一、数据持久化
- 🖼️ 十二、与生态工具衔接
- 🔄 十三、MATLAB → NumPy 关键差异
- ⚙️ 十四、性能与最佳实践
- 📚 总结:NumPy 核心思想
- 后续
- 资料关注
前言
本文主要讲解 NumPy 的核心知识点总结,涵盖其作为 Python 科学计算基石的关键概念与最佳实践,适合快速回顾、面试准备或系统学习。
🧱 一、基础核心:ndarray(N 维数组)
- 唯一数据结构:所有操作围绕
numpy.ndarray展开。 - 关键属性:
.shape:维度大小(元组).dtype:元素数据类型(如int32,float64,U10).ndim:维度数量.size:总元素个数
- 内存连续:默认 C 风格(行优先),支持高效缓存访问。
a = np.array([[1, 2], [3, 4]], dtype=np.float32)
print(a.shape, a.dtype) # (2, 2) float32
🔢 二、数组创建
| 方法 | 用途 |
|---|---|
np.array() |
从列表/元组创建 |
np.zeros(), np.ones() |
全零/全一阵 |
np.empty() |
未初始化数组(快) |
np.arange() |
等差整数序列(类似 range) |
np.linspace() |
指定数量的等间距浮点数 |
np.eye() / np.identity() |
单位矩阵 |
np.random.rand() 等 |
随机数组 |
✅ 推荐显式指定
dtype避免隐式转换。
📐 三、形状操作(Shape Manipulation)
- 重塑:
arr.reshape(new_shape)(返回视图,若可能) - 展平:
arr.flatten()(副本) vsarr.ravel()(视图优先) - 转置:
arr.T或arr.transpose(axes) - 维度增减:
- 增:
np.expand_dims(arr, axis) - 减:
np.squeeze(arr)(移除长度为1的轴)
- 增:
a = np.array([1, 2, 3])
b = a[:, np.newaxis] # → shape (3, 1)
🔗 四、数组连接与分割
| 操作 | 函数 |
|---|---|
| 水平拼接 | np.hstack() / np.concatenate(axis=1) |
| 垂直拼接 | np.vstack() / np.concatenate(axis=0) |
| 深度拼接 | np.dstack() |
| 分割 | np.split(), np.hsplit(), np.vsplit() |
⚠️ 注意:
concatenate要求除拼接轴外其他维度一致。
🔄 五、广播机制(Broadcasting)
规则(从后往前对齐):
- 维度相等,或
- 其中一个为 1,或
- 缺失维度(自动补 1)
✅ 示例:
(3,) + (2, 3)→(2, 3)(2, 1) + (3,)→(2, 3)
❌ 失败:
(2, 3) + (3, 2)→ 最后一维 3≠2 且都不为1
🔑 广播是向量化运算的核心,避免显式循环!
➕ 六、数组运算
1. 算术运算(逐元素)
+ - * / // % **- 支持标量、同形数组、广播数组
2. 比较与逻辑
- 比较:
== != > < >= <=→ 返回布尔数组 - 逻辑:
& | ~(用于布尔数组),np.logical_and/or/not
3. 位运算(整数)
& | ^ ~ << >>→ 对应np.bitwise_*
4. 通用函数(ufunc)
- 向量化数学函数:
np.sin,np.exp,np.sqrt,np.log - 累积:
np.add.accumulate() - 归约:
np.add.reduce()
🧮 七、聚合与统计
| 函数 | 说明 |
|---|---|
np.sum(), np.mean(), np.std() |
求和、均值、标准差 |
np.min(), np.max() |
最值 |
np.argmin(), np.argmax() |
返回索引 |
np.cumsum(), np.cumprod() |
累积和/积 |
axis 参数 |
沿指定轴聚合(axis=0 列,axis=1 行) |
arr = np.array([[1, 2], [3, 4]])
print(arr.sum(axis=0)) # [4 6]
🔍 八、排序与筛选
排序
np.sort(arr):返回排序副本arr.sort():原地排序np.argsort():返回排序索引
筛选(布尔索引)
arr = np.array([1, 2, 3, 4])
filtered = arr[arr > 2] # [3 4]# 多条件(注意括号!)
mask = (arr > 1) & (arr < 4)
条件选择
np.where(condition, x, y):三元运算np.select(),np.choose():多条件选择
🧩 九、特殊数组类型
1. 结构化数组(Structured Arrays)
- 异构字段:
dtype=[('name', 'U10'), ('age', 'i4')] - 访问:
arr['name']
2. 记录数组(Record Arrays)
- 属性访问:
arr.name(不推荐新项目使用)
3. 矩阵(Matrix)
- 已弃用!统一用
ndarray+@运算符
🧮 十、线性代数(numpy.linalg)
| 操作 | 函数 |
|---|---|
| 矩阵乘法 | A @ B 或 np.dot(A, B) |
| 转置 | A.T |
| 逆矩阵 | np.linalg.inv(A) |
| 行列式 | np.linalg.det(A) |
| 解方程 | np.linalg.solve(A, b) |
| 特征值 | np.linalg.eig(A) |
| SVD | np.linalg.svd(A) |
| 范数 | np.linalg.norm(x) |
✅ 优先用
solve而非inv(更稳定高效)
💾 十一、数据持久化
| 格式 | 函数 | 适用场景 |
|---|---|---|
.npy |
np.save() / np.load() |
单数组,高效 |
.npz |
np.savez() / np.load() |
多数组打包 |
| 文本 | np.savetxt() / np.loadtxt() |
小数据,可读 |
| 内存映射 | np.memmap |
超大数组(>内存) |
| HDF5 | h5py 库 |
科学大数据,跨平台 |
🖼️ 十二、与生态工具衔接
| 工具 | 关系 |
|---|---|
| Matplotlib | 直接绘图 NumPy 数组 |
| Pandas | DataFrame.values 返回 ndarray |
| SciPy | 基于 NumPy,提供高级算法 |
| scikit-learn | 输入要求为 NumPy 数组 |
| TensorFlow/PyTorch | 张量 ↔ NumPy 数组互转 |
🔄 十三、MATLAB → NumPy 关键差异
| MATLAB | NumPy |
|---|---|
| 索引从 1 开始 | 索引从 0 开始 |
A * B 是矩阵乘 |
A @ B 是矩阵乘,A * B 是逐元素 |
end 表示末尾 |
用 -1 |
[A; B] 垂直拼接 |
np.vstack([A, B]) |
A(:) 展平 |
A.ravel() |
⚙️ 十四、性能与最佳实践
- ✅ 避免 Python 循环:用向量化操作
- ✅ 预分配数组:
np.zeros()比动态 append 快 - ✅ 使用视图而非副本:切片、
ravel()默认返回视图 - ✅ 指定 dtype:避免不必要的类型提升
- ✅ 大数组用内存映射:
np.memmap - ❌ 不要用
np.matrix - ❌ 慎用
np.matrix和frompyfunc
📚 总结:NumPy 核心思想
“Everything is an array.”
—— 用统一的 N 维数组模型,通过向量化、广播、ufunc 实现高性能数值计算。
📌 附:速查命令
import numpy as np# 创建
a = np.arange(10).reshape(2,5)# 运算
b = np.sin(a) + 2# 筛选
c = b[b > 0]# 聚合
mean_val = c.mean()# 保存
np.save('result.npy', c)
后续
本文主要对numpy做一个总结。之前的python过渡项目部分代码已经上传至gitee,后续会逐步更新,主要受时间原因限制,当然自己也可以克隆到本地学习拓展。
资料关注
公众号:咚咚王
gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》