List of Lists Format (LIL)¶

• each row is a Python list (sorted) of column indices of non-zero elements

• rows stored in a NumPy array (dtype=np.object)

• non-zero values data stored analogously

• efficient for constructing sparse arrays incrementally

• constructor accepts:
• dense array/matrix

• sparse array/matrix

• shape tuple (create empty array)

• flexible slicing, changing sparsity structure is efficient

• slow arithmetic, slow column slicing due to being row-based

• use:
• when sparsity pattern is not known apriori or changes

• example: reading a sparse array from a text file

Examples¶

• create an empty LIL array:

```>>> mtx = sp.sparse.lil_array((4, 5))
```
• prepare random data:

```>>> rng = np.random.default_rng(27446968)
>>> data = np.round(rng.random((2, 3)))
>>> data
array([[1.,  0.,  1.],
[0.,  0.,  1.]])
```
• assign the data using fancy indexing:

```>>> mtx[:2, [1, 2, 3]] = data
>>> mtx
<List of Lists sparse array of dtype 'float64'
with 3 stored elements and shape (4, 5)>
>>> print(mtx)
<List of Lists sparse array of dtype 'float64'
with 3 stored elements and shape (4, 5)>
Coords    Values
(0, 1)    1.0
(0, 3)    1.0
(1, 3)    1.0
>>> mtx.toarray()
array([[0., 1., 0., 1., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
>>> mtx.toarray()
array([[0., 1., 0., 1., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
```
• more slicing and indexing:

```>>> mtx = sp.sparse.lil_array([[0, 1, 2, 0], [3, 0, 1, 0], [1, 0, 0, 1]])
>>> mtx.toarray()
array([[0, 1, 2, 0],
[3, 0, 1, 0],
[1, 0, 0, 1]]...)
>>> print(mtx)
<List of Lists sparse array of dtype 'int64'
with 6 stored elements and shape (3, 4)>
Coords    Values
(0, 1)    1
(0, 2)    2
(1, 0)    3
(1, 2)    1
(2, 0)    1
(2, 3)    1
>>> mtx[:2, :]
<List of Lists sparse array of dtype 'int64'
with 4 stored elements and shape (2, 4)>
>>> mtx[:2, :].toarray()
array([[0, 1, 2, 0],
[3, 0, 1, 0]]...)
>>> mtx[1:2, [0,2]].toarray()
array([[3, 1]]...)
>>> mtx.toarray()
array([[0, 1, 2, 0],
[3, 0, 1, 0],
[1, 0, 0, 1]]...)
```