Python Sparse матричный обратный и лапласианский расчет - PullRequest
3 голосов
/ 12 февраля 2012

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

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

1 Ответ

1 голос
/ 12 февраля 2012

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

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

...