Python稀疏矩阵逆和拉普拉斯计算
我有两个稀疏矩阵,A(亲和力矩阵)和D(对角矩阵),它们的大小都是100000*100000。我需要计算拉普拉斯矩阵L,公式是L = D^(-1/2)*A*D^(-1/2)。我正在使用scipy的CSR格式来处理稀疏矩阵。
我没有找到任何方法来计算稀疏矩阵的逆。请问如何找到L和稀疏矩阵的逆?另外,使用Python来做这个计算效率高吗,还是说应该调用Matlab的函数来计算L呢?
1 个回答
1
一般来说,稀疏矩阵的逆矩阵并不是稀疏的,这就是为什么在线性代数的库里找不到稀疏矩阵的逆矩阵计算工具。因为D
是对角矩阵,所以D^(-1/2)
的计算很简单,因此拉普拉斯矩阵的计算也很容易写出来。L
的稀疏结构和A
是一样的,但每个值A_{ij}都乘上了(D_i*D_j)^{-1/2}。
关于逆矩阵的问题,通常的做法是避免直接计算逆矩阵。与其计算L的逆,不如反复求解Lx=b来找到未知数x。所有好的矩阵求解器都会允许你对L进行分解,这个过程比较耗时,但之后的回代过程(也就是用已知的结果去求解未知数)就比较简单,可以对每个b的值反复进行。