# 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 ...
```