2.5.2. 存储方案

  • scipy.sparse 中有七种稀疏数组类型
    1. csr_array: 压缩稀疏行格式

    2. csc_array: 压缩稀疏列格式

    3. bsr_array: 块稀疏行格式

    4. lil_array: 列表列表格式

    5. dok_array: 键值对格式

    6. coo_array: 坐标格式(也称为 IJV,三元组格式)

    7. dia_array: 对角线格式

  • 每种都适合一些任务

  • 许多采用 Nathan Bell 编写的 sparsetools C++ 模块

  • 假设已导入以下内容

    >>> import numpy as np
    
    >>> import scipy as sp
    >>> import matplotlib.pyplot as plt
  • 警告 针对 Numpy 用户
    • 将稀疏数组对象传递给期望 ndarray/matrix 的 NumPy 函数不起作用。 使用稀疏函数。

    • 旧的 csr_matrix 类使用 ‘*’ 表示矩阵乘法(点积)和 ‘A.multiply(B)’ 表示元素乘法。

    • 较新的 csr_array 使用 ‘@’ 表示点积和 ‘*’ 表示元素乘法

    • 稀疏数组可以是 1D 或 2D,但不能是 nD(对于 n > 2)(与 Numpy 数组不同)。

2.5.2.1. 常用方法

  • 所有 scipy.sparse 数组类都是 sparray 的子类
    • 算术运算的默认实现
      • 始终转换为 CSR

      • 子类覆盖以提高效率

    • 形状、数据类型、设置/获取

    • 数组中非零值的索引

    • 格式转换,与 NumPy (toarray()) 的交互

  • 属性
    • mtx.T - 转置(与 mtx.transpose() 相同)

    • mtx.real - 复数矩阵的实部

    • mtx.imag - 复数矩阵的虚部

    • mtx.size - 非零值的个数(与 self.getnnz() 相同)

    • mtx.shape - 行数和列数(元组)

  • 数据和索引通常存储在 1D NumPy 数组中

2.5.2.2. 稀疏数组类

2.5.2.3. 总结

存储方案汇总。

格式

矩阵 * 向量

获取项目

高级获取

设置项目

高级设置

求解器

注意

CSR

sparsetools

.

任何

有数据数组,快速行操作

CSC

sparsetools

.

任何

有数据数组,快速列操作

BSR

sparsetools

.

.

.

.

专门的

有数据数组,专门的

COO

sparsetools

.

.

.

.

迭代的

有数据数组,便于快速转换

DIA

sparsetools

.

.

.

.

迭代的

有数据数组,专门的

LIL

通过 CSR

迭代的

通过 CSR 进行算术运算,增量构建

DOK

python

仅一个轴

迭代的

O(1) 项目访问,增量构建,慢速算术运算