跳转到内容

稀疏矩阵

来自代码酷

稀疏矩阵(Sparse Matrix)是指大部分元素为零或默认值的矩阵。在计算机科学中,稀疏矩阵的高效存储和操作是优化计算资源的关键技术之一,广泛应用于机器学习、科学计算、图形处理等领域。

定义与特点[编辑 | 编辑源代码]

稀疏矩阵的数学定义为:对于矩阵 Am×n,若其非零元素的数量远小于总元素数(即 nnzm×n),则称其为稀疏矩阵。

特点

  • 存储优化:仅保存非零元素及其位置,节省内存。
  • 计算效率:针对稀疏结构的算法可减少不必要的零值运算。

稀疏性判定[编辑 | 编辑源代码]

通常用稀疏度(Sparsity)衡量: Sparsity=1nnzm×n 其中 nnz 为非零元素数量。

存储格式[编辑 | 编辑源代码]

以下是常见的稀疏矩阵存储格式:

坐标列表(COO)[编辑 | 编辑源代码]

存储三元组 (行, 列, 值) 的列表。 示例

  
# 稀疏矩阵示例(3x3,3个非零元素)  
rows = [0, 1, 2]  
cols = [1, 2, 0]  
values = [5, 8, 3]

压缩稀疏行(CSR)[编辑 | 编辑源代码]

使用三个数组:

  • data:非零值。
  • indices:列索引。
  • indptr:行指针。

Python示例

  
from scipy.sparse import csr_matrix  

data = [3, 5, 8]  
indices = [0, 1, 2]  # 列索引  
indptr = [0, 1, 2, 3]  # 行指针(每行非零元素的起始位置)  

sparse_matrix = csr_matrix((data, indices, indptr), shape=(3, 3))  
print(sparse_matrix.toarray())  # 输出稠密矩阵

输出

  
[[3 0 0]  
 [0 5 0]  
 [0 0 8]]  

压缩稀疏列(CSC)[编辑 | 编辑源代码]

类似CSR,但按列压缩存储。

操作与算法[编辑 | 编辑源代码]

矩阵乘法[编辑 | 编辑源代码]

稀疏矩阵乘法需避免零值计算。以CSR格式为例:

  
# 两个稀疏矩阵相乘(A * B)  
A = csr_matrix([[1, 0, 2], [0, 3, 0]])  
B = csr_matrix([[0, 4], [5, 0], [0, 6]])  
result = A.dot(B)  
print(result.toarray())

输出

  
[[0 16]  
 [15 0]]  

转置[编辑 | 编辑源代码]

CSC格式天然支持高效转置。

应用案例[编辑 | 编辑源代码]

1. 自然语言处理(NLP) 词袋模型(Bag-of-Words)中,文档-词项矩阵通常是稀疏的。

2. 有限元分析 大型物理系统(如桥梁应力分析)的刚度矩阵多为稀疏矩阵。

3. 推荐系统 用户-物品评分矩阵通常稀疏,协同过滤算法依赖稀疏存储。

性能优化[编辑 | 编辑源代码]

  • 选择合适存储格式(CSR/CSC适用于行/列操作)。
  • 使用稀疏线性代数库(如SciPy、Eigen)。

总结[编辑 | 编辑源代码]

稀疏矩阵通过高效存储和计算优化,解决了大规模数据处理中的资源瓶颈问题。理解其存储格式和操作算法是高性能编程的重要基础。

graph LR A[稀疏矩阵] --> B[存储格式] B --> C[COO] B --> D[CSR] B --> E[CSC] A --> F[应用] F --> G[NLP] F --> H[有限元分析]