当前位置: 首页 > 工具软件 > lil-brother > 使用案例 >

Scipy.sparse中coo_matrix、csc_matrix、csr_matrix、lil_matrix区别与特点

巫马刚洁
2023-12-01

简介

coo_matrix: 坐标格式的矩阵(Coodrdinate format matrix)

优点:

  1. 不同稀疏格式间转换效率高(exp:CSR/CSC)
  2. coo_matrix不支持元素的存取和增删,一旦创建之后,除了将之转换成其它格式的矩阵,几乎无法对其做任何操作和矩阵运算。
  3. 构建矩阵时,允许坐标重复
data = [1, 1, 1]
row = [0, 1, 1]
col = [0, 1, 1]
matrix = sp.coo_matrix((data, (row, col)), shape=(3, 3))
matrix.todense()
out:
matrix([[1, 0, 0],
        [0, 2, 0],
        [0, 0, 0]])

缺点:

  1. 不能直接运算
  2. 不能直接切片操作

常用方法:

tocsc()
tocsr()
todense()  # 转化为 numpy.matrix 类型
csc_matrix: 压缩稀疏列矩阵(Compressed sparse column matrix)

优点:

  1. 高效的矩阵加法与乘法内积运算
  2. 高效的列切片操作

缺点:

  1. 矩阵内积操作没有CSR快
  2. 行切片操作慢(相比CSR)
  3. 转换成稀疏结构成本高(相比LIL)

常用方法:

matrix.dot(matrix) # 矩阵相乘
csr_matrix: 压缩稀疏行矩阵(Compressed sparse row matrix)

优点:

  1. 高效的矩阵加法与乘法内积运算
  2. 高效的行切片操作
  3. CSR格式在存储稀疏矩阵时非零元素平均使用的字节数(Bytes per Nonzero Entry)最为稳定(float类型约为8.5,double类型约为12.5)CSR格式常用于读入数据后进行稀疏矩阵计算。

缺点:

  1. 列切片操作慢(相比CSC)
  2. 转换成稀疏结构成本高(相比LIL)
lil_matrix:基于行连接存储的稀疏矩阵(Row-based linked list sparse matrix)

优点:

  1. 快速按行切片
  2. 高效地添加、删除、查找元素

缺点:

  1. 按列切片很慢(建议CSC)
  2. 算术运算LIL+LIL很慢(考虑CSR或CSC)
总结
  • 加载数据文件时使用coo_matrix快速构建稀疏矩阵,然后调用to_csr()、to_csc()、to_dense()把它转换成CSR或稠密矩阵(numpy.matrix)
  • coo_matrix格式常用于从文件中进行稀疏矩阵的读写,而csr_matrix格式常用于读入数据后进行稀疏矩阵计算.

https://www.cnblogs.com/YangZnufe/p/8413374.html
https://www.cnblogs.com/zhangchaoyang/articles/5483453.html

 类似资料: