# Sparse storage formats¶

CSR

There are a variety of matrix storage formats available for representing the sparse matrix. One of the most popular is compressed sparse row (CSR) format, that is represented by three arrays: row_ptr, col_ind and val, and index parameter.

 num_rows Number of rows in the sparse matrix. num_cols Number of columns in the sparse matrix. index Parameter that is used to specify whether the matrix has zero or one-based indexing. val An array that contains the non-zero elements of the sparse matrix stored row by row. col_ind An integer array of column indices for non-zero elements stored in the val array, such that col_ind[i] is the column number (using zero- or one-based indexing) of the element of the sparse matrix stored in val[i]. row_ptr An integer array of size equal to num_rows + 1. Element j of this integer array gives the position of the element in the val array that is first non-zero element in a row j of A. Note that this position is equal to row_ptr[j] - index. Last element of the row_ptr array (row_ptr[num_rows]) stores the sum of, number of nonzero elements and index*(number of nonzero elements + *index).

A sparse matrix can be represented in a CSR format in a following way (assuming zero-based indexing):

$\begin{split}A = \left(\begin{matrix} 1 & 0 & 2\\ 0 & -1 & 4\\ 3 & 0 & 0\\ \end{matrix}\right)\end{split}$
 num_rows 3 num_cols 3 index 0 val 1 2 -1 4 3 col_ind 0 2 1 2 0 row_ptr 0 2 4 5