2012-11-07 6 views
9

scipyのダウンロードとnumpyの間の擬似逆の差は、文書はで見ることができますhttp://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.pinv.htmlIは<code>Scipy</code>と<code>numpy</code>における行列の擬似逆行列を算出<code>pinv()</code>機能、2つのバージョンが存在していることが分かっ

http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.pinv.html

問題は、私は50000 * 5000マトリックスを持っているということですscipy.linalg.pinvを使用した場合、それは私にメモリの20ギガバイト以上の費用がかかります。私はnumpy.linalg.pinvを使用する場合でも、メモリが1GBよりだけ少ないがnumpyscipyの両方が異なるimplemention下pinvを持っている理由私が思っていた。..

を使用しています。そしてなぜ彼らのパフォーマンスがどう違うのですか?

答えて

10

私はscipyとnumpyの両方で実装されている理由については言えませんが、なぜ動作が異なるのか説明できます。 scipy.linalg.pinv最小二乗のモデル線形システムを解く一方

numpy.linalg.pinvは(dgelssを使用して)擬似逆行列を近似するセンス、SVD(LAPACK法dgesdd正確にする)を使用してムーア・ペンローズ疑似逆を近似します。これが彼らのパフォーマンスが異なる理由です。結果の疑似逆推定の全体的な精度もやや異なっていると思います。

scipy.linalg.pinv2は、numpy.linalg.pinvと同じように機能しますが、それはSVD法を使用しているため、sqauresの近似値が最小ではないためです。

+0

「SVD」法と「最小二乗法」のどちらかが良いです。 –

+0

"better"は非常に主観的な用語です。最初に擬似逆関数が必要なのはあなただけです。おそらく、アルゴリズムの性能と数値安定性に関する基準もあります。どちらが「より良い」かは、あなたの基準を最もよく満たすものです。 – talonmies

関連する問題

 関連する問題