python 稀疏存储与计算-scipy.sparse学习笔记(持续更新...)



官网链接https://docs.scipy.org/doc/scipy/reference/sparse.html


常用的几种稀疏矩阵存储形式以及适用场景


1. csr_matrix:

     优点:1. 能进行高效的算术运算。如:csr+csr,csr*csr

               2. 行切片很高效

               3. 矩阵向量内积很快

     缺点:1. 列切片很慢 (可以考虑csc)

               2. 稀疏结构的改变很昂贵(可以考虑lil,dok)

2. csc_matrix:

     优点:1. 同上能进行高效的算术运算

               2. 有效的列切片

               3. 很快的矩阵向量内积(csr,bsr更快)

     缺点:1. 行切片慢(考虑csr)

               2. 稀疏结构的改变很昂贵(考虑lil,dok)

3. coo_matrix:

     优点:1. 转换成其它存储格式很快捷简便

               2. 转换成csr/csc很快

               3. 允许重复的索引(例如在1行1列处存了值2.0,又在1行1列处存了值3.0,则转换成其它矩阵时就是             

                     2.0+3.0=5.0)

     缺点:1. 不直接支持切片

               2. 不能直接进行算术计算

     coo_matrix构建稀疏矩阵非常快捷,实际中可以转换成csr/csc形式进行切片,算术计算与向量内积计算。

4. bsr_matrix:

    很类似于csr,更适合于矩阵的某些子矩阵很多值,在某些情况下比csr和csc计算更高效。

5. dia_matrix:  

    对角线存储方式,0就在主对角线,-1在主对角线下方的第一条对角线。具体见官网例子。

6. dok_matrix:

     优点:依靠键的字典构建矩阵,对于递增的构建稀疏矩阵很高效,比如定义该矩阵后,想进行每行每列更新值,可用该矩阵。当访问某个单 

                 元,只需要O(1)

     缺点:不允许重复索引(coo中适用),但可以很高效的转换成coo后进行重复索引

7. lil_matrix:

    优点: 1. 支持灵活的切片

                2. 转换成其它存储方式很高效

                3. 适合递增的构建成矩阵

     缺点:1. lil+lil等算术运算很慢(可以考虑csr,csc)

                2. 列切片很慢(可以考虑csc)

                3. 矩阵向量内积很慢(考虑csr,csc)

                4. 当矩阵很大时,考虑用coo

   注:



稀疏矩阵计算中注意事项:


1.matrix.multiply():

   适合矩阵对应索引元素乘,即结果的每个元素sij=xij*yij,需区别它与点乘。

   有两个好处:a.该方法适合广播,即矩阵乘以一个行向量可以广播到该矩阵的每一行。

                         b.该方法计算后对于计算后矩阵中元素为0的自动忽略。比如a矩阵的第0行0列为1,b矩阵的第0行0列为0,则乘了之                                                         后第0行0列存储时不会有值。   

                         c.如果是稀疏矩阵*稀疏矩阵,则为矩阵点乘,而密集矩阵*密集矩阵则是对应元素相乘           

2.lil_matrix:

    2.1 lil_matirx平时应用很广,例如,对一个很大的方阵的对角线循环shape[0]次赋值,lil_matrix远快于csc和csr,所以这种操作建议先转换为     lil_matrix

    2.2 当进行一些矩阵运算的时候,原始为lil_matrix,之后可能会变成csr_matrix,所以注意检查慢的原因是不是变成了其它稀疏矩阵格式。

    2.3 当保存稀疏矩阵时,lil_matrix不适合  原文:matrix: spmatrix (format: ``csc``, ``csr``, ``bsr``, ``dia`` or coo``)

                                 


你可能感兴趣的:(python学习)