稠密矩阵和稀疏矩阵的对比
稠密矩阵和稀疏矩阵的对比
- Dense(稠密矩阵)
- Sparse(稀疏矩阵)
计算图的邻接矩阵时跑不动,爆内存,运行自动停止:
GPU state: True
Dataset: assist2012, Ques number: 53091, Skill number: 265Killed
Dense(稠密矩阵)
稠密矩阵(dense matrix)就是每个元素都显式存储在内存里的矩阵。
例如一个 3×3 的矩阵:
A = [[1, 0, 2],
[0, 0, 3],
[4, 0, 5]]
在稠密矩阵里,即使很多元素是 0,0 也会占内存存储。
特点:
内存占用 = 元素个数 × 每个元素大小
矩阵乘法、加法等操作都是针对所有元素进行的
小矩阵无所谓,但大矩阵(尤其是几百万 × 几百万)会 爆内存
Sparse(稀疏矩阵)
**稀疏矩阵(sparse matrix)**只存储 非零元素及其索引
上面的矩阵,如果只存非零元素,会存成:
值: [1,2,3,4,5]
行索引: [0,0,1,2,2]
列索引: [0,2,2,0,2]
内存占用 ≈ 非零元素数 × (值+索引)
当矩阵大而且大部分是 0 时,稀疏矩阵内存节省巨大
3️⃣ 为什么你的 G 计算爆内存
你原来的代码:
G = DV2 * H * W * invDE * HT * DV2
H 是 (百万 × 几百)
HT 是 (几百 × 百万)
当你相乘时,中间结果就成了 (百万 × 百万) 的矩阵 dense
即便大部分元素是 0,也会被完整存储,导致内存瞬间 TB 级别 → 爆掉
4️⃣ 总结
Dense 计算 = 所有元素都存储和计算,即使是 0
Sparse 计算 = 只存储非零元素,用稀疏算法计算,节省内存
对你的超图 G,必须全程稀疏矩阵计算,否则不可能在普通电脑上跑