键字典格式 (DOK)

  • Python 字典的子类
    • 键是 (行, 列) 索引元组(不允许重复条目)

    • 值是相应的非零值

  • 有效地用于增量构建稀疏数组

  • 构造函数接受
    • 密集数组/矩阵

    • 稀疏数组/矩阵

    • 形状元组(创建空数组)

  • 有效地 O(1) 访问单个元素

  • 灵活的切片,更改稀疏结构是有效的

  • 构建完成后可以有效地转换为 coo_array

  • 算术运算速度慢(使用 for 循环和 dict.items()

  • 使用
    • 当稀疏模式事先未知或发生变化时

示例

  • 逐元素创建 DOK 数组

    >>> mtx = sp.sparse.dok_array((5, 5), dtype=np.float64)
    
    >>> mtx
    <Dictionary Of Keys sparse array of dtype 'float64'
    with 0 stored elements and shape (5, 5)>
    >>> for ir in range(5):
    ... for ic in range(5):
    ... mtx[ir, ic] = 1.0 * (ir != ic)
    >>> mtx
    <Dictionary Of Keys sparse array of dtype 'float64'
    with 20 stored elements and shape (5, 5)>
    >>> mtx.toarray()
    array([[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]
    
    np.float64(0.0)
    >>> mtx[[1], 1:3]
    <Dictionary Of Keys sparse array of dtype 'float64'
    with 1 stored elements and shape (1, 2)>
    >>> mtx[[1], 1:3].toarray()
    array([[0., 1.]])
    >>> mtx[[2, 1], 1:3].toarray()
    array([[1., 0.],
    [0., 1.]])