1

疎行列 W を使用するlinalg.pinv(W)と、いくつかのエラーがスローされます。

Traceback (most recent call last):
  File "/Users/ad9075/PycharmProjects/bednmf/test.py", line 14, in testNmfRun
    self.factor = factorization(self.V)
  File "/Users/ad9075/PycharmProjects/bednmf/nmf.py", line 18, in factorization
    W_trans = linalg.pinv(W)
  File "/Library/Python/2.7/site-packages/scipy/linalg/basic.py", line 540, in pinv
    b = np.identity(a.shape[0], dtype=a.dtype)
IndexError: tuple index out of range`

しかし、それを に変更するとlinalg.pinv(W.todense())、うまく機能します。しかし、一般化された逆行列を計算したい場合、本当に疎行列を変換する必要がありますか? 誰かがこれについてアイデアを持っていますか?

ありがとう!

4

2 に答える 2

2

疎行列の逆行列 (および一般化された逆行列) は、行列の行と列を並べ替えてブロック対角になるようにしない限り、通常は密です。

したがって、問題は 2 つの部分に分割されます。(i) ブロック対角になる順列を見つけ、(ii) ブロックごとに個別に linalg.pinv を使用して一般化された逆行列を計算します。行列が十分に小さい場合は、最初に密な行列に変換してから疑似逆行列を計算するだけでも効率的です。

一方、「A^{-1} x」のようなものを計算したい場合は、gmres やその他の反復ルーチンを使用する方が効率的な解決策になる場合があります。

于 2012-11-03T13:56:13.650 に答える
0

あなたの答えはここにあります:Cの良い行列反転ルーチン(タイトルがあなたを邪魔させないでください、議論はscipyについてです)

しかし、逆行列は必ずしもスパース行列ではなく、GeorgeE.ForsytheとCleveB.Molerが言ったように、次のことを知っておく必要があります。

「A^{-1}でできることのほとんどは、A^{-1}なしでも実行できます」

于 2012-11-02T13:52:22.087 に答える