3

次元が 100000*100000 の 2 つのスパース行列 A (アフィニティ行列) と D (対角行列) があります。ラプラシアン行列 L = D^(-1/2)*A*D^(-1/2) を計算する必要があります。スパース行列に scipy CSR 形式を使用しています。

疎行列の逆行列を見つける方法が見つかりませんでした。Lとスパース行列の逆を見つける方法は? また、Pythonを使用して効率的に行うことをお勧めしますか、Lを計算するためにmatlab関数を呼び出す必要がありますか?

4

1 に答える 1

1

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

逆数の問題に関して、標準的なアプローチは常に逆数自体の計算を避けることです。L^-1 を計算する代わりに、未知の x に対して Lx=b を繰り返し解きます。優れたマトリックス ソルバーはすべて、コストのかかる L を分解し、b の各値に対して繰り返し逆代入 (コストが低い) を実行できるようにします。

于 2012-02-12T12:47:28.560 に答える