Scipy.sparse中coo_matrix、csc_matrix、csr_matrix、lil_matrix辨析

简介

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

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. 不同稀疏格式间转换效率高(exp:CSR/CSC)
  2. coo_matrix不支持元素的存取和增删,一旦创建之后,除了将之转换成其它格式的矩阵,几乎无法对其做任何操作和矩阵运算。
  3. 构建矩阵时,允许坐标重复

缺点

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

常用方法:

tocsc()  # 转化为压缩稀疏列矩阵
tocsr()  # 转化为压缩稀疏行矩阵
todense()  # 转化为 numpy.matrix 类型

2. csc_matrix: 压缩稀疏列矩阵(Compressed sparse column matrix)

优点

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

缺点

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

常用方法:

matrix.dot(matrix) # 矩阵相乘

3. csr_matrix: 压缩稀疏行矩阵(Compressed sparse row matrix)

详细介绍见文章☞scipy.sparse csr_matrix()icon-default.png?t=M4ADhttps://blog.csdn.net/qq_38388811/article/details/124512342?spm=1001.2014.3001.5502

优点

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

缺点

  1. 列切片操作慢(相比CSC)
  2. 转换成稀疏结构成本高(相比LIL)

4. lil_matrix:基于行连接存储的稀疏矩阵(Row-based linked list sparse matrix)

优点

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

缺点:

  1. 按列切片很慢(建议CSC)
  2. 算术运算LIL+LIL很慢(考虑CSR或CSC)

5. 总结

  • 加载数据文件时使用coo_matrix快速构建稀疏矩阵,然后调用to_csr()、to_csc()、to_dense()把它转换成CSR或稠密矩阵(numpy.matrix)
  • coo_matrix格式常用于从文件中进行稀疏矩阵的读写,而csr_matrix格式常用于读入数据后进行稀疏矩阵计算.

更多了解scipy csr_matrix 之 indptricon-default.png?t=M4ADhttps://blog.csdn.net/qq_38388811/article/details/124654100?spm=1001.2014.3001.5502

你可能感兴趣的:(随笔记_心得,矩阵,线性代数,csr_matrix,python)