2012-02-12 5 views
3

차원이 100000 * 100000 인 두 개의 희소 행렬 A (친화 행렬)와 D (대각 행렬)가 있습니다. 라플라시안 행렬 L = D^(- 1/2) * A * D^(- 1/2)를 계산해야합니다. 스파 스 매트릭스에 scipy CSR 형식을 사용하고 있습니다.파이썬 희소 행렬 역함수와 라 플라시 계산

스파 스 매트릭스의 역함수를 찾는 방법을 찾지 못했습니다. 스파 스 매트릭스의 L과 역행렬을 찾는 방법은? 또한 그것이 파이썬을 사용하여 그렇게하는 것이 효율적인지 또는 L을 계산하기 위해 matlab 함수를 호출해야합니까?

답변

1

일반적으로 스파 스 매트릭스의 역함수는 희소하지 않으므로 선형 대수 라이브러리에서 스파 스 매트릭스 인버터를 찾지 못합니다. D은 대각선이기 때문에 D^(-1/2)은 사소한 것이므로 라플라시안 매트릭스 계산은 간단히 적어 둡니다. LA과 동일한 희소성 패턴을 갖지만 각 값 A_ {ij}에는 (D_i * D_j)^{- 1/2}가 곱 해집니다.

역변환 문제와 관련하여 표준 방식은 항상 역 자체 계산을 피하는 것입니다. L^-1을 계산하는 대신, 미지의 x에 대해 Lx = b를 반복적으로 푸십시오. 모든 좋은 행렬 솔버는 값 비싼 L을 분해하고 b의 각 값에 대해 반복적으로 (값이 싼) 대체 할 수있게합니다.