2012-02-12 25 views
3

私は次元100000 * 100000の2つの疎行列A(親和性行列)とD(対角行列)を持っています。ラプラシアン行列L = D ^( - 1/2)* A * D ^( - 1/2)を計算する必要があります。私は、スパース行列にscipy CSRフォーマットを使用しています。Pythonの疎行列逆行列とラプラシアン計算

スパース行列の逆行列を見つける方法が見つかりませんでした。スパース行列のLと逆行列を見つけるには?また、それはpythonを使用することによってそうすることが効率的であることを示唆するか、私はLを計算するためのMATLAB関数を呼び出す必要がありますか?

答えて

1

一般に、疎な行列の逆行列は疎ではありません。そのため、線形代数ライブラリで疎行列のインバータを見つけることができません。 Dは対角であるため、D^(-1/2)は簡単で、ラプラシアン行列の計算は簡単に書き留めることができます。 Lは、Aと同じスパース性パターンを持ちますが、各値A_ {ij}に(D_i * D_j)^ { - 1/2}を掛けます。

逆数の問題に関して、標準的なアプローチは常に逆自体の計算を避けることです。 L^-1を計算する代わりに、未知のxについてLx = bを繰り返し解く。すべての良い行列ソルバは、高価なLを分解し、bの各値に対して反復的に(安価に)代入することを可能にします。

関連する問題