efficient for constructing sparse matrices incrementally
flexible slicing, changing sparsity structure is efficient
slow arithmetics, slow column slicing due to being row-based
create an empty LIL matrix:
>>> mtx = sparse.lil_matrix((4, 5))
prepare random data:
>>> from numpy.random import rand
>>> data = np.round(rand(2, 3))
>>> data
array([[ 1., 1., 1.],
[ 1., 0., 1.]])
assign the data using fancy indexing:
>>> mtx[:2, [1, 2, 3]] = data
>>> mtx
<4x5 sparse matrix of type '<... 'numpy.float64'>'
with 5 stored elements in LInked List format>
>>> print(mtx)
(0, 1) 1.0
(0, 2) 1.0
(0, 3) 1.0
(1, 1) 1.0
(1, 3) 1.0
>>> mtx.todense()
matrix([[ 0., 1., 1., 1., 0.],
[ 0., 1., 0., 1., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
>>> mtx.toarray()
array([[ 0., 1., 1., 1., 0.],
[ 0., 1., 0., 1., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
more slicing and indexing:
>>> mtx = sparse.lil_matrix([[0, 1, 2, 0], [3, 0, 1, 0], [1, 0, 0, 1]])
>>> mtx.todense()
matrix([[0, 1, 2, 0],
[3, 0, 1, 0],
[1, 0, 0, 1]]...)
>>> print(mtx)
(0, 1) 1
(0, 2) 2
(1, 0) 3
(1, 2) 1
(2, 0) 1
(2, 3) 1
>>> mtx[:2, :]
<2x4 sparse matrix of type '<... 'numpy.int64'>'
with 4 stored elements in LInked List format>
>>> mtx[:2, :].todense()
matrix([[0, 1, 2, 0],
[3, 0, 1, 0]]...)
>>> mtx[1:2, [0,2]].todense()
matrix([[3, 1]]...)
>>> mtx.todense()
matrix([[0, 1, 2, 0],
[3, 0, 1, 0],
[1, 0, 0, 1]]...)