Numpy入门

311 阅读3分钟

一、什么是 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呢?

  1. 张量(Tensor)本质就是多维数组(ndarray)

PyTorch 和 TensorFlow 的核心数据结构都是“张量”

张量的操作方式几乎就是 NumPy 的扩展

比如:加法、乘法、切片、维度变换等,和 NumPy 几乎一模一样

  1. 矩阵运算是深度学习的核心

权重矩阵乘输入向量:np.dot(W, x) + b

前向传播、反向传播都离不开线性代数

NumPy 提供了矩阵乘法、转置、广播等一整套工具

  1. 很多教程都用 NumPy 来讲解原理

比如:手写一个两层神经网络 → 都是用 NumPy 实现

  1. 帮助理解深度学习框架的底层逻辑

PyTorch 的 torch.tensor 和 np.array 类似

TensorFlow 的 tf.Tensor 操作风格也几乎一样

理解 NumPy 就等于掌握了这些框架的“母语”

  1. 以下为一个简单的向前传播过程,用的全是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]