📌 目录

  1. 稀疏矩阵简介
  2. scipy.sparse 模块概览
  3. 常见稀疏矩阵格式
  4. 稀疏矩阵的构建与转换
  5. 稀疏矩阵的基本操作
  6. 与稠密矩阵的互相转换
  7. 稀疏矩阵的线性代数运算
  8. 示例:稀疏矩阵在推荐系统中的应用
  9. 出站链接与参考资料

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)

稀疏表示可用于快速计算协同过滤、相似度矩阵等。


🔗 出站链接与参考资料

📘 官方文档

🎓 实战教程