dポイントプレゼントキャンペーン実施中!

pythonで、lamda = np.linalg.inv(sigma)
でsigmaが2x2の変数で、これを繰り返し計算していると、何回めかに
下記のようなエラーが出ます。下の値で、pythonでインターラクティブに計算して
見たのですが、ちゃんと逆行列は求まります。何が悪いのでしょうか?


lamda=[[ 0.16138508 0.03359245]
File "/Users/tetsuomiyoshi/PycharmProjects/nonparametricbayes2/nonparamerticbayes2.py", line 255, in <module>
[ 0.03359245 0.14452796]]
p_rate = p_update(X, c_first, mu, beta, nu)
lank=1
File "/Users/tetsuomiyoshi/PycharmProjects/nonparametricbayes2/nonparamerticbayes2.py", line 170, in p_update
lamda = np.linalg.inv(sigma + sigma0)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/linalg/linalg.py", line 519, in inv
ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/linalg/linalg.py", line 90, in _raise_linalgerror_singular
raise LinAlgError("Singular matrix")

質問者からの補足コメント

  • a = np.array([[0.24183635, 0.44269067], [0.44269067, 0.81036215]])
    の逆行列を求めている所で、
    これは実際にpythonで計算すると、
    array([[ -1.69855324e+08, 9.27898313e+07],
    [ 9.27898313e+07, -5.06899188e+07]])
    になるようなのですが、
    行列式の値がほとんど0に近い値なので起きているエラーのような気がするのですが、
    これを回避する方法とかあるのでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/06/17 19:08

A 回答 (2件)

先に行列式を求めて、絶対値がある程度以下なら逆行列は求めない。


という方法で回避自体はできますが。

ただ、それでいいのか
ロジックやデータがおかしいのが真の原因ではないか
ということは確認するのがいいかと思います。



念の為
array([[ -1.69855324e+08, 9.27898313e+07],
[ 9.27898313e+07, -5.06899188e+07]])
の e はエラーではありません。 -1.69855324e+07 は -1.69855324 * (10**7) の意味です。
    • good
    • 0

Singlar matrix: 特異行列、非正則行列 つまり、逆行列を持たない行列


と書いてありあすよね?

繰り返すことで、sigmaが変化しているのでは?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!