Всякий раз, когда я умножаю фрагмент разреженной матрицы на постоянную на месте, я теряю разреженность матрицы, потому что Сципи начинает вычислять 0 * constant
для каждой пустой записи, а затем заполняет все пустые записи 0
. Это глупо. Как я могу остановить это от этого? Индексы должны быть целыми или логическими. Они не могут использовать :
.
Так например
A = scipy.sparse.csr_matrix([[0, 1], [0, 0]])
print(A, '/n' )
A[[0,0],[0,1]] *= -1
print(A)
Результаты в
(0, 1) 1
(0, 0) 0
(0, 1) -1
Размер А не должен был измениться.
EDIT:
Так как кажется неясным, чего я пытаюсь достичь, я хочу умножить число элементов из разреженной матрицы на константу, не теряя разреженности этой матрицы и не прибегая к операциям, которые являются более дорогими, чем линейные в количество ненулевых элементов в этом количестве элементов, т.е. с использованием разреженной структуры. Так что также не нужно копировать всю разреженную матрицу, что означает, что умножение должно быть на месте.