Coordinate Format (COO)¶
- also known as the ‘ijv’ or ‘triplet’ format
three NumPy arrays: row, col, data.
attribute coords is the tuple (row, col)
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 arrays
- constructor accepts:
dense array/matrix
sparse array/matrix
shape tuple (create empty matrix)
(data, coords) 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, converts to CSR)
- 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 array:
>>> mtx = sp.sparse.coo_array((3, 4), dtype=np.int8) >>> mtx.toarray() array([[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_array((data, (row, col)), shape=(4, 4)) >>> mtx <COOrdinate sparse array of dtype 'int64' with 4 stored elements and shape (4, 4)> >>> mtx.toarray() array([[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_array((data, (row, col)), shape=(4, 4)) >>> mtx.toarray() array([[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_array' object ...