2.5.2. 存储方案¶
- scipy.sparse 中有七种稀疏数组类型
csr_array: 压缩稀疏行格式
csc_array: 压缩稀疏列格式
bsr_array: 块稀疏行格式
lil_array: 列表列表格式
dok_array: 键值对格式
coo_array: 坐标格式(也称为 IJV,三元组格式)
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()) 的交互
…
- 所有 scipy.sparse 数组类都是
- 属性
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) 项目访问,增量构建,慢速算术运算 |