次元が 100000*100000 の 2 つのスパース行列 A (アフィニティ行列) と D (対角行列) があります。ラプラシアン行列 L = D^(-1/2)*A*D^(-1/2) を計算する必要があります。スパース行列に scipy CSR 形式を使用しています。
疎行列の逆行列を見つける方法が見つかりませんでした。Lとスパース行列の逆を見つける方法は? また、Pythonを使用して効率的に行うことをお勧めしますか、Lを計算するためにmatlab関数を呼び出す必要がありますか?
次元が 100000*100000 の 2 つのスパース行列 A (アフィニティ行列) と D (対角行列) があります。ラプラシアン行列 L = D^(-1/2)*A*D^(-1/2) を計算する必要があります。スパース行列に scipy CSR 形式を使用しています。
疎行列の逆行列を見つける方法が見つかりませんでした。Lとスパース行列の逆を見つける方法は? また、Pythonを使用して効率的に行うことをお勧めしますか、Lを計算するためにmatlab関数を呼び出す必要がありますか?
一般に、スパース行列の逆行列はスパースではないため、線形代数ライブラリにスパース行列インバーターが見つかりません。D
は対角なのでD^(-1/2)
自明なので、ラプラシアン行列の計算は簡単に書き留めることができます。L
と同じスパース パターンを持ちますA
が、各値 A_{ij} に (D_i*D_j)^{-1/2} を掛けます。
逆数の問題に関して、標準的なアプローチは常に逆数自体の計算を避けることです。L^-1 を計算する代わりに、未知の x に対して Lx=b を繰り返し解きます。優れたマトリックス ソルバーはすべて、コストのかかる L を分解し、b の各値に対して繰り返し逆代入 (コストが低い) を実行できるようにします。