2.5.2.2.5. Compressed Sparse Row Format (CSR)

  • 行定向
    • 三个NumPy数组:索引indptr数据
      • indices是列索引的数组
      • data是相应的非零值数组
      • indptr指向索引数据中的行开始
      • 长度为n_row + 1,最后项目=值数量=两个索引数据
      • nonzero values of the i-th row are data[indptr[i]:indptr[i+1]] with column indices indices[indptr[i]:indptr[i+1]]
      • item (i, j) can be accessed as data[indptr[i]+k], where k is position of j in indices[indptr[i]:indptr[i+1]]
    • 子类_cs_matrix(公共CSR / CSC功能)
      • _data_matrix的子类(具有.data属性的稀疏矩阵类)
  • 快速矩阵矢量产物和其他算术(稀疏工具)
  • 构造函数接受:
    • 密集矩阵(阵列)
    • 稀疏矩阵
    • 形状元组(创建空矩阵)
    • (data,ij)元组
    • (data,indices,indptr)元组
  • 高效行分片,面向行的操作
  • 慢列切片,稀疏结构的昂贵的变化
  • 使用:
    • 实际计算(大多数线性解算器支持这种格式)

2.5.2.2.5.1. Examples

  • 创建空CSR矩阵:

    >>> mtx = sparse.csr_matrix((3, 4), dtype=np.int8)
    
    >>> mtx.todense()
    matrix([[0, 0, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 0]], dtype=int8)
  • 创建使用(data,ij)元组:

    >>> 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 = sparse.csr_matrix((data, (row, col)), shape=(3, 3))
    >>> mtx
    <3x3 sparse matrix of type '<... 'numpy.int64'>'
    with 6 stored elements in Compressed Sparse Row format>
    >>> mtx.todense()
    matrix([[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], dtype=int32)
    >>> mtx.indptr
    array([0, 2, 3, 6], dtype=int32)
  • 创建使用(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 = sparse.csr_matrix((data, indices, indptr), shape=(3, 3))
    >>> mtx.todense()
    matrix([[1, 0, 2],
    [0, 0, 3],
    [4, 5, 6]])