Это не относится к строке или столбцу. По сути, вы заставляете Сципи вставлять элементы в середину двух массивов, что, как говорится в предупреждении, стоит дорого.
Давайте посмотрим на внутреннее представление csr до и после модификации на месте, чтобы подтвердить это:
>>> csr.data
array([0, 1, 2, 3, 4], dtype=int64)
>>> csr.indices
array([0, 1, 2, 3, 4], dtype=int32)
>>>
>>> csr[:, 0] += dok
/home/paul/lib/python3.6/site-packages/scipy/sparse/compressed.py:742: SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
SparseEfficiencyWarning)
>>> csr.data
array([0, 1, 1, 2, 3, 4], dtype=int64)
>>> csr.indices
array([0, 0, 1, 2, 3, 4], dtype=int32)
Немного предыстории: сжатые разреженные форматы строк и столбцов по существу хранят только ненулевые значения. Они делают это упакованным способом, используя векторы для хранения ненулевых значений и их координат в определенном порядке. Если операция добавляет новые ненулевые элементы, они, как правило, не могут быть добавлены, но должны быть вставлены, что мы и видим в примере и что делает его дорогим.