Dictionary of Keys Format (DOK)#
subclass of Python dict
keys are
(row, column)
index tuples (no duplicate entries allowed)values are corresponding non-zero values
efficient for constructing sparse arrays incrementally
constructor accepts:
dense array/matrix
sparse array/matrix
shape tuple (create empty array)
efficient O(1) access to individual elements
flexible slicing, changing sparsity structure is efficient
can be efficiently converted to a coo_array once constructed
slow arithmetic (
for
loops withdict.items()
)use:
when sparsity pattern is not known apriori or changes
Examples#
Create a DOK array element by element:#
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.]])
Slicing and indexing:#
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.]])