1️、基础概念

  • NumPy(Numerical Python)是 Python 的数值计算核心库,提供高效的 多维数组(ndarray)向量化运算

  • 核心对象:

    import numpy as np
    a = np.array([1, 2, 3])
    type(a)  # <class 'numpy.ndarray'>
    
  • ndarray 特点:

    • n 维数组(1D、2D、3D…)
    • 同类型元素(dtype)
    • 高效的内存布局和向量化运算

2️、创建数组

2.1 由列表创建

import numpy as np

a = np.array([1,2,3])          # 一维
b = np.array([[1,2],[3,4]])    # 二维

2.2 内置函数创建

np.zeros((2,3))      # 全零
np.ones((2,3))       # 全一
np.eye(3)            # 单位矩阵
np.arange(0,10,2)    # 类似 range
np.linspace(0,1,5)   # 等间隔数列
np.random.rand(2,3)  # [0,1)随机数
np.random.randn(2,3) # 标准正态分布
np.random.randint(0,10,(2,3)) # 整数随机

2.3 特殊类型

np.empty((2,3))    # 未初始化的数组
np.full((2,3), 7)  # 填充特定值

3️、数组属性

a = np.array([[1,2,3],[4,5,6]])

a.shape   # (2,3)
a.size    # 6
a.ndim    # 2
a.dtype   # dtype('int64')
a.itemsize # 每个元素占用字节数
a.nbytes  # 总字节数 = size * itemsize

4️、索引与切片

4.1 基本索引

a[0,1]    # 第0行第1列
a[1,:]    # 第1行
a[:,2]    # 第2列

4.2 布尔索引

mask = a > 3
a[mask]   # array([4,5,6])

4.3 整数数组索引

rows = np.array([0,1])
cols = np.array([2,1])
a[rows,cols]  # array([3,5])

4.4 切片与步长

a[:, ::2]   # 每行取步长为2的列

5️、数组运算(向量化)

5.1 元素级运算

a = np.array([1,2,3])
b = np.array([4,5,6])

a + b
a - b
a * b   # 元素乘
a / b
a ** 2  # 元素平方

5.2 常用函数

np.sum(a)
np.mean(a)
np.max(a)
np.min(a)
np.argmax(a)
np.argmin(a)
np.std(a)
np.var(a)

5.3 矩阵运算

A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])

A @ B        # 矩阵乘法
A.dot(B)     # 矩阵乘法
A.T          # 转置

6️、广播机制

  • 不同形状的数组运算时,NumPy 会自动扩展维度:
a = np.array([1,2,3])   # shape (3,)
b = np.array([[1],[2]]) # shape (2,1)

c = a + b
# b自动广播为 [[1,1,1],[2,2,2]]

7️、线性代数

A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])

np.linalg.inv(A)    # 逆矩阵
np.linalg.det(A)    # 行列式
np.linalg.eig(A)    # 特征值、特征向量
np.linalg.solve(A,B)# 解线性方程 AX=B
np.linalg.norm(A)   # 范数

8️、随机数模块

np.random.seed(42)          # 设置随机种子
np.random.rand(3)           # [0,1)均匀
np.random.randn(3)          # 标准正态
np.random.randint(0,10,5)   # 整数
np.random.choice([1,2,3],3) # 随机抽样

9️、排序与唯一值

a = np.array([3,1,2,3])
np.sort(a)     # 排序
np.argsort(a)  # 排序索引
np.unique(a)   # 唯一值

10️、堆叠与拆分

a = np.array([1,2])
b = np.array([3,4])

np.vstack([a,b])   # 垂直堆叠
np.hstack([a,b])   # 水平堆叠

np.split(a,2)      # 拆分

11️、高级索引技巧

  • 条件修改
a[a>2] = 0
  • 广播+索引组合
a[:, np.newaxis] + b
  • 布尔矩阵索引
mask = (A>2) & (A<4)
A[mask]

12️、性能优化

  1. 向量化

    • 尽量避免 Python 循环。
# 慢
for i in range(len(a)):
    b[i] = a[i]*2
# 快
b = a*2
  1. 数据类型优化

    • 使用 dtype=np.float32 而不是默认 float64 可节省内存。
  2. 内存共享

    • 切片操作不会复制数据。
b = a[::2]  # b 与 a 共享内存
  1. np.einsum

    • 高性能张量操作,如批量矩阵乘法。

13️、文件 I/O

np.save("a.npy", a)          # 保存
b = np.load("a.npy")         # 读取
np.savetxt("a.txt", a)       # 文本保存
c = np.loadtxt("a.txt")      # 文本读取

14️、实用技巧

  • reshape
a.reshape(3,2)
  • flatten / ravel
a.flatten()  # 复制
a.ravel()    # 共享内存
  • clip
np.clip(a, 0, 5)  # 限制范围
  • where
np.where(a>2, a, 0)

总结

NumPy 主要功能模块:

功能 说明
ndarray 多维数组,向量化计算
创建 zeros, ones, arange, linspace, random
索引切片 基本索引、布尔索引、整型索引
运算 元素级运算、矩阵运算、广播
线性代数 inv, det, eig, solve, norm
随机 rand, randn, randint, choice
排序/唯一 sort, argsort, unique
堆叠/拆分 vstack, hstack, split
文件 I/O save, load, savetxt, loadtxt
性能优化 向量化、dtype优化、共享内存、einsum

更多推荐