Compressed Sparse Row Format (CSR)

慈云数据 2024-04-23 技术支持 114 0

Compressed Sparse Row Format (CSR)

    • three numpy arrays: indices, indptr, data
      • indices is array of column indices
      • data is array of corresponding nonzero values
      • indptr points to row starts in indices and data
      • length is n_row + 1, last item = number of values = length of both indices and data
      • 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]]
      • subclass of _cs_matrix (common CSR/CSC functionality)
        • subclass of _data_matrix (sparse matrix classes with .data attribute)
        • fast matrix vector products and other arithmetics (sparsetools)
        • constructor accepts:
          • deNSE matrix (array)
          • sparse matrix
          • shape tuple (create empty matrix)
          • (data, ij) tuple
          • (data, indices, indptr) tuple
          • efficient row slicing, row-oriented operations
          • slow column slicing, expensive changes to the sparsity structure
          • use:
            • actual computations (most linear solvers support this format)

              Examples¶

              • create empty CSR matrix:

                Compressed Sparse Row Format (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)
                       
                       
              • create using (data, ij) tuple:

                >>> 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     
                       
                       
                       
                       >>> 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)
                       
                       
              • create using (data, indices, indptr) tuple:

                Compressed Sparse Row Format (CSR)
                (图片来源网络,侵删)
                >>> 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]])
                       
                       

                See https://scipy-lectures.org/advanced/scipy_sparse/csr_matrix.html

                HTTPS://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.sparse.csr_matrix.html

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon