Coordinate Format (COO)¶
- also known as the ‘ijv’ or ‘triplet’ format
- three NumPy arrays: row, col, data
- data[i] is value at (row[i], col[i]) position
- permits duplicate entries
- subclass of
_data_matrix
(sparse matrix classes with .data attribute)
fast format for constructing sparse matrices
- constructor accepts:
- dense matrix (array)
- sparse matrix
- shape tuple (create empty matrix)
- (data, ij) tuple
very fast conversion to and from CSR/CSC formats
fast matrix * vector (sparsetools)
- fast and easy item-wise operations
- manipulate data array directly (fast NumPy machinery)
no slicing, no arithmetics (directly)
- use:
facilitates fast conversion among sparse formats
when converting to other format (usually CSR or CSC), duplicate entries are summed together
- facilitates efficient construction of finite element matrices
Examples¶
create empty COO matrix:
>>> mtx = sparse.coo_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, 3, 1, 0]) >>> col = np.array([0, 3, 1, 2]) >>> data = np.array([4, 5, 7, 9]) >>> mtx = sparse.coo_matrix((data, (row, col)), shape=(4, 4)) >>> mtx <4x4 sparse matrix of type '<... 'numpy.int64'>' with 4 stored elements in COOrdinate format> >>> mtx.todense() matrix([[4, 0, 9, 0], [0, 7, 0, 0], [0, 0, 0, 0], [0, 0, 0, 5]])
duplicates entries are summed together:
>>> row = np.array([0, 0, 1, 3, 1, 0, 0]) >>> col = np.array([0, 2, 1, 3, 1, 0, 0]) >>> data = np.array([1, 1, 1, 1, 1, 1, 1]) >>> mtx = sparse.coo_matrix((data, (row, col)), shape=(4, 4)) >>> mtx.todense() matrix([[3, 0, 1, 0], [0, 2, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]])
no slicing…:
>>> mtx[2, 3] Traceback (most recent call last): ... TypeError: 'coo_matrix' object ...