Hide code cell source

import numpy as np
import scipy as sp

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]])

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