You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scipy.sparse.csr_matrix与scipy.sparse.lil_matrix的区别及各自优势是什么?

scipy.sparse.csr_matrix 与 scipy.sparse.lil_matrix 的差异及优势

底层实现差异

  • lil_matrix(List of Lists Matrix,列表式稀疏矩阵):底层采用两个嵌套列表存储数据,一个列表按行存储每行非零元素的列索引,另一个列表按行存储对应非零元素的数值,每行的列表长度等于当前行的非零元素总数。
  • csr_matrix(Compressed Sparse Row Matrix,压缩稀疏行矩阵):底层采用三个一维数组压缩存储:
    1. indptr:行指针数组,长度为「矩阵行数+1」,每个元素存储当前行非零元素在值数组中的起始偏移量
    2. indices:按行顺序排列的所有非零元素的列索引
    3. data:和indices一一对应的非零元素数值

各自优势与适用场景

lil_matrix 优势

  • 极适合动态构建稀疏矩阵的场景:如果预先不知道非零元素的分布,需要逐个插入、修改非零元素时,lil_matrix的单元素操作时间复杂度极低,效率远高于csr_matrix。
  • 行切片操作效率高,读取/修改指定行的非零元素非常方便。
  • 缺点:内存占用比压缩格式高,矩阵乘法、向量运算等数值操作效率极低,不适合做线性代数计算。

csr_matrix 优势

  • 极适合数值运算的场景:作为压缩存储格式,内存占用远低于lil_matrix,矩阵乘法、向量乘法、求和、转置等线性代数运算的速度是所有稀疏矩阵格式中第一梯队的水平,是工业界做稀疏计算的首选格式。
  • 全量非零元素遍历、行遍历的效率非常高,适合批量处理矩阵数据。
  • 缺点:不支持高效的动态元素修改,插入/删除单个非零元素的开销极大,不适合增量构建矩阵。

通用最佳实践:需要从零构建稀疏矩阵时,先用lil_matrix完成所有非零元素的写入,再调用.tocsr()方法一次性转换为csr_matrix做后续运算,同时兼顾构建效率和计算效率。

内容的提问来源于stack exchange,提问作者최재원

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:48:06