In [472]: dok = { (0,0): 1, (0,9): 1, (5,12): 1}
Сделать пустую dok
матрицу:
In [473]: M = sparse.dok_matrix((20,20), dtype=int)
In [474]: M
Out[474]:
<20x20 sparse matrix of type '<class 'numpy.int64'>'
with 0 stored elements in Dictionary Of Keys format>
M
является подклассом словаря Python.Раньше мы могли использовать метод словаря .update
, чтобы эффективно добавлять новые значения из словаря Python, но этот метод был отключен (попробуйте увидеть сообщение об ошибке).Однако задняя дверь была предоставлена:
In [475]: M._update(dok)
In [476]: M
Out[476]:
<20x20 sparse matrix of type '<class 'numpy.int64'>'
with 3 stored elements in Dictionary Of Keys format>
_update
содержит предупредительный комментарий, что значения не проверяются, поэтому используйте с осторожностью.
После того, как вы получите формат dok
, выможно преобразовать его в csr
формат:
In [477]: M1=M.tocsr()
In [478]: M1
Out[478]:
<20x20 sparse matrix of type '<class 'numpy.int64'>'
with 3 stored elements in Compressed Sparse Row format>
In [479]: M1.A
Out[479]:
array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
...
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
dtype=int64)
Если вы допустили ошибку при определении dok
, он, вероятно, будет отображаться при преобразовании csr
.
Другой вариантсостоит в том, чтобы перебрать ваш dok
и создать соответствующие входные данные стиля coo
(данные, строки, столбцы).Это был оригинальный стиль, который стоит понять и использовать.