In [844]: row = np.array([0, 1])
...: col = np.array([0, 1])
...: data = np.array([1 ,1])
...: sample_csr=sparse.csr_matrix((data, (row, col)))
In [845]: sample_csr
Out[845]:
<2x2 sparse matrix of type '<class 'numpy.longlong'>'
with 2 stored elements in Compressed Sparse Row format>
In [846]: _.A
Out[846]:
array([[1, 0],
[0, 1]], dtype=int64)
Вычитание 2 матриц возвращает новую матрицу; он не изменяет sample_csr
.
In [847]: sample_csr-sample_csr
Out[847]:
<2x2 sparse matrix of type '<class 'numpy.longlong'>'
with 0 stored elements in Compressed Sparse Row format>
Вы можете изменить data
матрицы на месте
In [848]: sample_csr=sparse.csr_matrix((data, (row, col)))
In [849]: sample_csr.data *= 0
In [850]: sample_csr
Out[850]:
<2x2 sparse matrix of type '<class 'numpy.longlong'>'
with 2 stored elements in Compressed Sparse Row format>
Фактически, для эффективности sparse.csr
позволяет количество изменений без выяснения новой редкости. Вы можете даже получить предупреждение об эффективности, если попытаетесь сделать что-то, требующее изменения разреженности (например, добавление ненулевого значения).
И очистить разреженность после последовательности операций:
In [851]: sample_csr.eliminate_zeros()
In [852]: sample_csr
Out[852]:
<2x2 sparse matrix of type '<class 'numpy.longlong'>'
with 0 stored elements in Compressed Sparse Row format>
Я не знаю, как сохранить 0, как вы хотите. Предположительно это потребовало бы глубоких изменений в том, как он отслеживает разреженность обоих операндов.
Разреженные матрицы, особенно формат csr
, оптимизированы для умножения матриц. Другая математика, как поэлементное сложение и вычитание, намного медленнее.