numpy ライブラリ (numpy-MKL-1.6.2.win-amd64-py2.7) の特異値分解アルゴリズムを使用しようとしていますが、この関数が正しくないことを提案します。この関数には次のステートメントがあります。
from numpy.linalg import *
U, S, V = svd(A, full_matrices=0)
私の仮定は、Matlab の同じ関数との比較比較に基づいており、正しい答えが得られます。また、問題は V 行列の計算の誤りに関連していることもわかりました。
たとえば、行列 A があります。
A =[-15.5714, 19.2143, 15.0000; -2.8462, 7.7692, -3.9615; -19.5000, 3.1111, 4.5556]
pythonで私は受け取ります:
V = [0.7053, -0.5629, -0.4308; -0.6863, -0.6945, -0.2161; -0.1776, 0.4481, -0.8762]
そしてMatlabで:
V = [0.7053, -0.6863, -0.1776; -0.5629, -0.6945, 0.4481; -0.4308, -0.2161, -0.8762]
違いはそれほど明白ではありませんが、LLS の計算中に重要になります。どうすればこの問題を克服できますか?
OK、答えが見つかりました: [U,S,V]=svd(a) - Matlab U, S, Vh = linalg.svd(a), V = Vh.T - Python 多分私の質問は将来誰かを助けるでしょう.