压缩稀疏行格式 (CSR)¶
- 行优先
- 三个 NumPy 数组:indices、indptr、data
indices 是列索引数组
data 是对应非零值的数组
indptr 指向 indices 和 data 中行的起始位置
indptr 的长度为 n_row + 1,最后一个元素 = 值的数量 = indices 和 data 的长度
第 i 行的非零值是 data[indptr[i]:indptr[i + 1]],列索引为 indices[indptr[i]:indptr[i + 1]]
元素 (i, j) 可以访问为 data[indptr[i] + k],其中 k 是 j 在 indices[indptr[i]:indptr[i + 1]] 中的位置
_cs_matrix
的子类(CSR/CSC 通用功能)_data_matrix
的子类(具有 .data 属性的稀疏数组类)
快速的矩阵向量积和其他算术运算(sparsetools)
- 构造函数接受
密集数组/矩阵
稀疏数组/矩阵
形状元组(创建空数组)
(data, coords) 元组
(data, indices, indptr) 元组
高效的行切片,面向行的操作
缓慢的列切片,对稀疏结构的更改代价昂贵
- 用途
实际计算(大多数线性求解器支持此格式)
示例¶
创建空 CSR 数组
>>> mtx = sp.sparse.csr_array((3, 4), dtype=np.int8) >>> mtx.toarray() array([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], dtype=int8)
使用 (data, coords) 元组创建
>>> row = np.array([0, 0, 1, 2, 2, 2]) >>> col = np.array([0, 2, 2, 0, 1, 2]) >>> data = np.array([1, 2, 3, 4, 5, 6]) >>> mtx = sp.sparse.csr_array((data, (row, col)), shape=(3, 3)) >>> mtx <Compressed Sparse Row sparse array of dtype 'int64' with 6 stored elements and shape (3, 3)> >>> mtx.toarray() array([[1, 0, 2], [0, 0, 3], [4, 5, 6]]...) >>> mtx.data array([1, 2, 3, 4, 5, 6]...) >>> mtx.indices array([0, 2, 2, 0, 1, 2]) >>> mtx.indptr array([0, 2, 3, 6])
使用 (data, indices, indptr) 元组创建
>>> data = np.array([1, 2, 3, 4, 5, 6]) >>> indices = np.array([0, 2, 2, 0, 1, 2]) >>> indptr = np.array([0, 2, 3, 6]) >>> mtx = sp.sparse.csr_array((data, indices, indptr), shape=(3, 3)) >>> mtx.toarray() array([[1, 0, 2], [0, 0, 3], [4, 5, 6]])