列表列表格式 (LIL)¶
- 基于行的链表
每行是一个 Python 列表(排序),包含非零元素的列索引
行存储在 NumPy 数组中(dtype=np.object)
非零值数据类似地存储
高效地增量构建稀疏数组
- 构造函数接受
密集数组/矩阵
稀疏数组/矩阵
形状元组(创建空数组)
灵活的切片,高效地更改稀疏性结构
缓慢的算术运算,由于基于行,所以缓慢的列切片
- 使用
当稀疏性模式事先未知或会发生变化时
示例:从文本文件读取稀疏数组
示例¶
创建一个空的 LIL 数组
>>> mtx = sp.sparse.lil_array((4, 5))
准备随机数据
>>> rng = np.random.default_rng(27446968) >>> data = np.round(rng.random((2, 3))) >>> data array([[1., 0., 1.], [0., 0., 1.]])
使用花式索引分配数据
>>> 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.]])
更多切片和索引
>>> 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]]...)