2.5.2.2.3. Dictionary of Keys Format (DOK)

  • Python dict的子类
    • 键为(行,列)索引元组(不允许重复条目)
    • 值是对应的非零值
  • 有效地用于渐进地构建稀疏矩阵
  • 构造函数接受:
    • 密集矩阵(阵列)
    • 稀疏矩阵
    • 形状元组(创建空矩阵)
  • 高效O(1)访问各个元素
  • 灵活切片,变化稀疏结构是有效的
  • 可以有效地转换成coo_matrix一旦构造
  • 慢算法(用于循环与dict.iteritems()
  • 使用:
    • 当稀疏模式不是已知先验或改变

2.5.2.2.3.1. Examples

  • 按元素创建DOK矩阵元素:

    >>> mtx = sparse.dok_matrix((5, 5), dtype=np.float64)
    
    >>> mtx
    <5x5 sparse matrix of type '<... 'numpy.float64'>'
    with 0 stored elements in Dictionary Of Keys format>
    >>> for ir in range(5):
    ... for ic in range(5):
    ... mtx[ir, ic] = 1.0 * (ir != ic)
    >>> mtx
    <5x5 sparse matrix of type '<... 'numpy.float64'>'
    with 20 stored elements in Dictionary Of Keys format>
    >>> mtx.todense()
    matrix([[ 0., 1., 1., 1., 1.],
    [ 1., 0., 1., 1., 1.],
    [ 1., 1., 0., 1., 1.],
    [ 1., 1., 1., 0., 1.],
    [ 1., 1., 1., 1., 0.]])
  • 切片和索引:

    >>> mtx[1, 1]
    
    0.0
    >>> mtx[1, 1:3]
    <1x2 sparse matrix of type '<... 'numpy.float64'>'
    with 1 stored elements in Dictionary Of Keys format>
    >>> mtx[1, 1:3].todense()
    matrix([[ 0., 1.]])
    >>> mtx[[2,1], 1:3].todense()
    matrix([[ 1., 0.],
    [ 0., 1.]])