稀疏矩阵的 CSR 格式(Compressed Sparse Row)

CSR 是一种存储稀疏矩阵的高效格式,通过只存储非零元素来节省内存。它用三个数组来表示矩阵。

1. 三个核心数组

假设我们有一个稀疏矩阵:

复制代码
[[1, 0, 0, 2],
 [0, 3, 4, 0],
 [5, 0, 0, 6]]

CSR 格式需要三个数组:

data 数组

存储所有非零元素的值,按行优先顺序排列:

复制代码
data = [1, 2, 3, 4, 5, 6]
indices 数组

存储每个非零元素所在的列索引:

复制代码
indices = [0, 3, 1, 2, 0, 3]
indptr 数组

行指针数组,长度为 行数 + 1,存储每行第一个非零元素在 data 中的起始位置:

复制代码
indptr = [0, 2, 4, 6]

解释,

indptr[0] =0 指出第0行从 data0 开始

indptr[1] =2 指出第1行从 data2 开始

indptr[2] =4 指出第2行从 data4 开始

indptr[3] =6 指出结束位置,同时最后这个值也会等于元素个数。

2. 矩阵重建过程

通过三个数组可以完全恢复原矩阵:

  • 第0行 data[indptr[0]:indptr[1]] = [1, 2],对应列 indices[0:2] = [0, 3]

  • 第1行 data[indptr[1]:indptr[2]] = [3, 4],对应列 indices[2:4] = [1, 2]

  • 第2行 data[indptr[2]:indptr[3]] = [5, 6],对应列 indices[4:6] = [0, 3]

3. 代码示例

python 复制代码
import numpy as np
from scipy.sparse import csr_matrix

# 创建稀疏矩阵
dense_matrix = np.array([[1, 0, 0, 2],
                         [0, 3, 4, 0],
                         [5, 0, 0, 6]])

# 转换为CSR格式
sparse_csr = csr_matrix(dense_matrix)

# 查看三个数组
print(f"data: {sparse_csr.data}")
print(f"indices: {sparse_csr.indices}")
print(f"indptr: {sparse_csr.indptr}")

# 从CSR格式重建
reconstructed = sparse_csr.toarray()
print(f"重建矩阵:\n{reconstructed}")

4. 优点和缺点

优点

节省内存,只存储非零元素

行切片和矩阵乘法效率高

适合行访问频繁的场景

缺点

列访问效率低

频繁插入/删除非零元素代价高

比 COO 格式复杂

5. 适用场景

机器学习中的特征矩阵(通常是行表示样本,列表示特征)

图算法中的邻接矩阵

有限元分析

任何行访问频繁的稀疏矩阵运算

CSR 格式是现代科学计算和机器学习中最常用的稀疏矩阵存储格式之一,特别是在处理大规模数据时。

相关推荐
Samooyou4 分钟前
RAG项目案例--02在线检索&过滤流水线
人工智能·python·ai·全文检索·检索
动能小子ohhh12 分钟前
DocForge平台的设计与开发--文件上传接口的实现
开发语言·人工智能·python·langchain·ocr·fastapi
朴马丁23 分钟前
预制菜的“数字厨房”:PLM如何支撑菜品标准化与供应链高效协同?
大数据·人工智能·食品行业·流程行业plm
小沈同学呀29 分钟前
SpringAI+MCPServer实战-StreamableHTTP协议打造企业级AI工具服务
人工智能·微服务架构·springai·mcpserver·javaai·streamablehttp
net3m3333 分钟前
一阶软件低通滤波器算法
人工智能·算法
武汉唯众智创39 分钟前
边缘端部署 AI 心理分析:自研边缘主机跑通人脸 + 语音双模态推理,不用云端算力详解
人工智能·ai心理健康·校园心理健康·多模态推理·人脸情绪识别·语音情感分析·心理健康信息化平台
IT_陈寒43 分钟前
Python的线程池把我坑惨了,原来异步不是万能的
前端·人工智能·后端
水木流年追梦1 小时前
大模型入门-大模型优化方法12-YaRN 长文本外推技术
人工智能·分布式·算法·正则表达式·prompt
Litluecat1 小时前
2026年6月6日科技热点新闻
人工智能·科技·热点·每日
小旭95271 小时前
Spring AI Alibaba 从入门到实战:一站式掌握企业级 AI 应用开发
java·人工智能·spring