稀疏矩阵是非零元素极少且分布无规律的矩阵,当稀疏因子≤0.05时即认定为稀疏矩阵;其核心特征是零元素占绝大多数、非零元位置随机、原始存储浪费大、计算效率低;三元组(coo)用三个数组记录行下标、列下标和值,并含m、n、t元数据,可无损还原原矩阵。
稀疏矩阵是指非零元素极少、且分布没有规律的矩阵。当非零元素个数占总元素个数的比例(即稀疏因子)≤ 5%(也就是 ≤ 0.05)时,通常就认定为稀疏矩阵。它和对角矩阵、三角矩阵等“有结构规律”的特殊矩阵不同——那些可以靠数学公式推算位置,而稀疏矩阵的非零元散落各处,无法预测,所以必须显式记录每个有效值的位置和大小。
稀疏矩阵的核心特征
● 零元素占绝大多数,存储大量 0 是冗余的
● 非零元素数量少,但位置随机、无固定模式
● 原始二维数组存储会造成严重空间浪费(例如 10⁴×10⁴ 矩阵仅含 1 个非零元,却要开 1 亿个 int)
● 运算中反复遍历零值,降低计算效率
三元组数组的基本结构
三元组(COO 格式)用三个平行的一维数组(或一个结构体数组)来记录全部非零元:行下标 i、列下标 j、对应值 a[i][j]。整个压缩结果还额外包含首行元数据:
- 第 0 行:矩阵总行数 m、总列数 n、非零元总数 t
- 第 1 至第 t 行:每行一个三元组 (i, j, value),按任意顺序(常见按行优先,也可按列或输入顺序)排列
例如原矩阵:
0 0 0<br> 34 0 23<br> 0 0 0
压缩后三元组数组为:
3 3 2
1 0 34
1 2 23
为什么三元组能实现无损压缩
● 完整保留所有必要信息:知道 m、n 就确定了矩阵形状;知道 t 个 (i, j, value) 就完全还原出每个非零位置的值;其余位置默认为 0
● 不丢失任何语义:还原时只需初始化 m×n 全零矩阵,再按三元组逐个赋值即可,结果与原矩阵严格一致
● 无近似、无舍入、无采样——是确定性、可逆的精确表示
实际使用中的注意事项
● 存储开销约为 3t + 3 个整型/浮点型单元(比原始 m×n 小得多,只要 t ≪ m×n)
● 支持快速遍历所有非零元,适合加法、转置等操作
● 不支持 O(1) 随机查值(比如问 a[2][1] 是多少,需遍历查找),若需高频单点访问,CSR 或 CSC 更合适
● 若后续要做矩阵乘法或迭代求解,建议转为 CSR/CSC 格式以提升计算性能











