📌 目录
- 稀疏矩阵简介
scipy.sparse
模块概览- 常见稀疏矩阵格式
- 稀疏矩阵的构建与转换
- 稀疏矩阵的基本操作
- 与稠密矩阵的互相转换
- 稀疏矩阵的线性代数运算
- 示例:稀疏矩阵在推荐系统中的应用
- 出站链接与参考资料
1. 稀疏矩阵简介
在数据科学中,稀疏矩阵是大部分元素为 0 的矩阵。这类结构在文本分析、推荐系统、图神经网络等领域非常常见。为了节省内存和计算开销,使用稀疏矩阵表示形式是关键手段。
2. scipy.sparse
模块概览
SciPy 提供了一个专门的子模块 scipy.sparse
用于构建、操作和计算稀疏矩阵。主要支持的格式包括:
- COO(Coordinate format)
- CSR(Compressed Sparse Row)
- CSC(Compressed Sparse Column)
- DOK(Dictionary of Keys)
- LIL(List of Lists)
3. 常见稀疏矩阵格式
COO 格式(Coordinate)
适合一次性构造稀疏矩阵。
from scipy.sparse import coo_matrix
row = [0, 1, 2]
col = [0, 1, 2]
data = [4, 5, 6]
coo = coo_matrix((data, (row, col)))
print(coo)
CSR 格式(Compressed Sparse Row)
适合矩阵运算,如矩阵乘法、切片等。
from scipy.sparse import csr_matrix
csr = coo.tocsr()
print(csr)
4. 稀疏矩阵的构建与转换
from scipy.sparse import csr_matrix
dense = [[0, 0, 1], [1, 0, 0], [0, 2, 0]]
sparse = csr_matrix(dense)
print(sparse) # 打印稀疏表示
print(sparse.toarray()) # 转换为普通数组
不同格式转换
from scipy.sparse import csc_matrix
csc = sparse.tocsc()
dok = sparse.todok()
5. 稀疏矩阵的基本操作
# 取值
print(sparse[0, 2]) # 输出 1
# 修改值(建议在 LIL 或 DOK 格式下操作)
lil = sparse.tolil()
lil[0, 0] = 9
6. 与稠密矩阵的互相转换
dense_matrix = sparse.toarray()
sparse_matrix = csr_matrix(dense_matrix)
7. 稀疏矩阵的线性代数运算
矩阵乘法
from scipy.sparse import csr_matrix
import numpy as np
A = csr_matrix([[1, 0], [0, 1]])
B = csr_matrix([[4, 1], [2, 2]])
C = A.dot(B)
print(C.toarray())
求解线性方程组
from scipy.sparse.linalg import spsolve
A = csr_matrix([[3, 1], [1, 2]])
b = np.array([9, 8])
x = spsolve(A, b)
print(x) # 解为 [2. 3.]
8. 示例:稀疏矩阵在推荐系统中的应用
在推荐系统中,用户-物品矩阵通常非常稀疏。我们可以用 csr_matrix
表示评分数据:
from scipy.sparse import csr_matrix
# 模拟用户对商品的评分数据
ratings = [
[5, 0, 0],
[4, 0, 0],
[0, 0, 3],
[0, 2, 0]
]
sparse_ratings = csr_matrix(ratings)
print("稀疏表示:\n", sparse_ratings)
print("非零项总数:", sparse_ratings.nnz)
稀疏表示可用于快速计算协同过滤、相似度矩阵等。
🔗 出站链接与参考资料
📘 官方文档
scipy.sparse
概述:
https://docs.scipy.org/doc/scipy/reference/sparse.html- 稀疏线性代数:
https://docs.scipy.org/doc/scipy/reference/sparse.linalg.html
🎓 实战教程
- Scipy 稀疏矩阵入门教程:
https://scipy-lectures.org/advanced/scipy_sparse/index.html - 稀疏矩阵在机器学习中的应用:
https://scikit-learn.org/stable/modules/scipy_sparse.html
发表回复