Python Sparse обратная матрица и вычисление лапласиана

У меня есть две разреженные матрицы A (матрица сходства) и D (диагональная матрица) размером 100000*100000. Мне нужно вычислить матрицу Лапласа L = D^(-1/2)*A*D^(-1/2). Я использую формат scipy CSR для разреженной матрицы.

Я не нашел способа найти обратную разреженную матрицу. Как найти L и обратную разреженной матрице? Также предложите, эффективно ли это сделать с помощью python или мне вызвать функцию Matlab для вычисления L?


person Swapnil P    schedule 12.02.2012    source источник


Ответы (1)


Как правило, обратная разреженная матрица не является разреженной, поэтому вы не найдете инверторов разреженных матриц в библиотеках линейной алгебры. Поскольку D является диагональным, D^(-1/2) является тривиальным, и, таким образом, вычисление матрицы Лапласа легко записать. L имеет тот же шаблон разреженности, что и A, но каждое значение A_{ij} умножается на (D_i*D_j)^{-1/2}.

Что касается вопроса об обратном, стандартный подход всегда состоит в том, чтобы избегать вычисления самого обратного. Вместо вычисления L^-1 повторно решите Lx=b для неизвестного x. Все хорошие матричные решатели позволят вам разложить L, что дорого, а затем повторно заменить (что дешево) повторно для каждого значения b.

person David Heffernan    schedule 12.02.2012
comment
Привет. Мне интересно лучше понять, что вы говорите о том, как эффективно вычислить обратную разреженную матрицу. Не могли бы вы предоставить мне пример или любую ссылку, которую я мог бы проверить? Спасибо! - person Vicent; 27.03.2021
comment
@ Висент, я не уверен, о чем ты спрашиваешь. Я сказал, что вычислять обратную матрицу неэффективно. - person David Heffernan; 27.03.2021
comment
Да... Я неправильно понял ваш ответ, извините. - person Vicent; 27.03.2021