Как указывает @ user2357112 csr
подходит для линейной алгебры. Однако стоимость конверсии значительна. Поскольку dok
- не единственный формат, который поддерживает редактирование приемлемого времени, стоит проверить другой вариант, который lil
. В зависимости от вашего варианта использования вы можете сэкономить немного времени:
from scipy import sparse
from timeit import timeit
a = random(100,100,0.1,format='lil')
b = random(100,100,0.1,format='dok')
a
# <100x100 sparse matrix of type '<class 'numpy.float64'>'
# with 1000 stored elements in LInked List format>
b
# <100x100 sparse matrix of type '<class 'numpy.float64'>'
# with 1000 stored elements in Dictionary Of Keys format>
timeit(lambda:(a@a).tolil(),number=100)*10
# 1.491789099527523
timeit(lambda:(b@b).todok(),number=100)*10
# 4.220661079743877
Обратите внимание, что a@a
/ b@b
довольно плотно в этом примере, если мы выбираем более редкий вариант, разница менее выражена:
a = random(100,100,0.01,format='lil')
b = random(100,100,0.01,format='dok')
timeit(lambda:(a@a).tolil(),number=100)*10
# 0.6880075298249722
timeit(lambda:(b@b).todok(),number=100)*10
# 0.7450748200062662