2.5.2.2.2. List of Lists Format (LIL)

  • 基于行的链表
    • 每一行是非零元素的列索引的Python列表(排序)
    • 存储在NumPy数组中的行(dtype = np.object
    • 非零值数据类似地存储
  • 有效地用于渐进地构建稀疏矩阵
  • 构造函数接受:
    • 密集矩阵(阵列)
    • 稀疏矩阵
    • 形状元组(创建空矩阵)
  • 灵活切片,变化稀疏结构是有效的
  • 慢算法,由于是基于行的慢列切片
  • 使用:
    • 当稀疏模式不是已知先验或改变
    • 示例:从文本文件读取稀疏矩阵

2.5.2.2.2.1. Examples

  • 创建一个空的LIL矩阵:

    >>> mtx = sparse.lil_matrix((4, 5))
    
  • 准备随机数据:

    >>> from numpy.random import rand
    
    >>> data = np.round(rand(2, 3))
    >>> data
    array([[ 1., 1., 1.],
    [ 1., 0., 1.]])
  • 使用花式索引分配数据:

    >>> 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.]])
  • 更多切片和索引:

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