3

これがパッケージのバグなのか、他の原因によるものなのかはわかりませんが、これで終わりです。

次のパッケージを使用して、類似度スコアの対称行列 (サイズが 10x10) で最大の固有値とそれに対応する固有ベクトルを見つけています。

scipy.sparse.linalg.eigen.arpack.eigsh

、 そのようです:

scipy.sparse.linalg.eigen.arpack.eigsh(mymatrix, 1, which='LM')

今私が持っている質問は、(同じ行列、設定などを使用して) 数回実行すると、固有ベクトルの値が正の場合もあれば負の場合もあるということです (実行 3を参照)。

これがなぜなのか誰か知っていますか、それともバグですか?パターンはないようですが、各反復後に Python を閉じずにコードを実行した場合にのみ発生します (つまり、各実行後に F5 を押します)。

### Run 1: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

### Run 2: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

### Run 3:###
[[ 0.31056873]
[ 0.31913092]
[ 0.3149287 ]
[ 0.32262921]
[ 0.32190688]
[ 0.31292658]
[ 0.32424732]
[ 0.31885208]
[ 0.31808024]
[ 0.298174  ]]

### Run 4: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

それは大きな問題ではありませんが、コードの不確実性は好きではありません ;-)

よろしくお願いします。

マーティン

4

2 に答える 2

7

これは実際には数学の問題です。

しかし、その理由は、固有ベクトルを計算するときに任意のフェーズがあるためです。x について Ax = bx を解いています。この方程式は、(おそらく ocmplex) 位相による乗算の下で不変です。

なぜそれが(一見)ランダムな形で起こるのかについては、私にはわかりません. しかし、私はそれがバグではないと確信しています。

于 2013-01-31T14:18:14.403 に答える