一、什么是 NumPy?
NumPy(Numerical Python)是一个用于科学计算的Python库,它提供了一个功能强大、灵活的多维数组对象(ndarray),并配备了大量用于操作这些数组的函数和工具。
通俗地说,NumPy 是 Python 里的“数学计算引擎”,类似于 MATLAB 中的矩阵操作。
主要功能包括:
1.快速创建、操作和修改多维数组
2.支持矢量化计算(用数组代替循环)
3.提供数学函数库(如 sin、exp、mean、std)
4.与 C/C++、Fortran 等集成,计算效率高
5.是很多科学库(如 Pandas、TensorFlow、PyTorch)背后的基础
二、NumPy 的核心概念
1. ndarray 数组对象(重点)
是 NumPy 的核心数据结构
比 Python 原生的 list 更快、更节省空间
属性包括:.shape, .dtype, .ndim, .size, .itemsize 等
2. 数组的创建方式
np.array():从列表或元组创建
np.zeros():全 0 数组
np.ones():全 1 数组
np.arange():范围数组(类似 range)
np.linspace():等间距数组
np.random 模块:创建随机数组
3. 数组索引和切片(重点)
与列表类似,但更强大
支持多维索引,如 a[1, 2],切片如 a[:, 1:3]
支持布尔索引(如 a[a > 0])
4. 广播机制(进阶重点)
允许不同形状的数组进行数学运算。广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度的轴长相符,另外一种是有一方的长度为1。再简化一点,两个数组在任意轴上长度或维度(或长度+维度)相等,则可以触发广播。
是 NumPy 高效的核心原理之一
5. 通用函数(ufunc)
如 np.add(), np.sin(), np.mean(), np.sum(), np.dot() 等
支持元素级的快速计算
6. 数组操作与变形
重塑形状:reshape()
维度变换:transpose(), swapaxes()
拼接与拆分:concatenate(), split(), vstack(), hstack()
7. 数值计算与统计
平均值:np.mean()
标准差:np.std()
最大/最小值:np.max(), np.min()
排序:np.sort()
8. 文件读写
np.loadtxt() / np.genfromtxt() 读取文本文件
np.save() / np.load() 保存和读取二进制 .npy 文件
三、NumPy实操
1.将列表转化为Numpy可以使用的数组
2.生成全0全1和空矩阵
3.reshape改变矩阵形状
4.linspace的使用
语法:np.linspace(start, stop, num)
在区间 [start, stop] 上生成 num 个等间距的数。
5.一维向量的算术、三角函数,判断大小
6.矩阵相乘运算dot
7.随机生成一个矩阵,并获得sum,max,min(可按axis)
8.各种运算:排序,最值索引,裁剪clip,转置transpose
9.通过索引获取array中元素
10.矩阵的遍历flat
11.两个矩阵合并与升维 vstack hatack newaxis
12.多个矩阵合并
13.矩阵分割 spit
14.浅拷贝与深拷贝
四、学习深度学习之前为什么要学习numpy呢?
- 张量(Tensor)本质就是多维数组(ndarray)
PyTorch 和 TensorFlow 的核心数据结构都是“张量”
张量的操作方式几乎就是 NumPy 的扩展
比如:加法、乘法、切片、维度变换等,和 NumPy 几乎一模一样
- 矩阵运算是深度学习的核心
权重矩阵乘输入向量:np.dot(W, x) + b
前向传播、反向传播都离不开线性代数
NumPy 提供了矩阵乘法、转置、广播等一整套工具
- 很多教程都用 NumPy 来讲解原理
比如:手写一个两层神经网络 → 都是用 NumPy 实现
- 帮助理解深度学习框架的底层逻辑
PyTorch 的 torch.tensor 和 np.array 类似
TensorFlow 的 tf.Tensor 操作风格也几乎一样
理解 NumPy 就等于掌握了这些框架的“母语”
- 以下为一个简单的向前传播过程,用的全是numpy
# 输入
x = np.array([1.0, 2.0])
# 权重矩阵 (2 -> 2)
W = np.array([[0.1, 0.3], [0.2, 0.4]])
# 偏置
b = np.array([0.1, 0.2])
# 前向传播(仿神经网络)
y = np.dot(x, W) + b
print(y) # 输出:[0.5 1.1]