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 arithmetic (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 = sp.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 = sp.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 = sp.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 ...