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])
positionpermits 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]])
Note: duplicate 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]])
Note: no slicing…:
mtx[2, 3]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[6], line 1
----> 1 mtx[2, 3]
TypeError: 'coo_array' object is not subscriptable