稀疏矩阵
外观
稀疏矩阵(Sparse Matrix)是指大部分元素为零或默认值的矩阵。在计算机科学中,稀疏矩阵的高效存储和操作是优化计算资源的关键技术之一,广泛应用于机器学习、科学计算、图形处理等领域。
定义与特点[编辑 | 编辑源代码]
稀疏矩阵的数学定义为:对于矩阵 ,若其非零元素的数量远小于总元素数(即 ),则称其为稀疏矩阵。
特点:
- 存储优化:仅保存非零元素及其位置,节省内存。
- 计算效率:针对稀疏结构的算法可减少不必要的零值运算。
稀疏性判定[编辑 | 编辑源代码]
通常用稀疏度(Sparsity)衡量: 其中 为非零元素数量。
存储格式[编辑 | 编辑源代码]
以下是常见的稀疏矩阵存储格式:
坐标列表(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)。
总结[编辑 | 编辑源代码]
稀疏矩阵通过高效存储和计算优化,解决了大规模数据处理中的资源瓶颈问题。理解其存储格式和操作算法是高性能编程的重要基础。