14

関数にはとpinv()の行列の疑似逆行列を計算する2 つのバージョンがあることがわかりました。ドキュメントは次の場所で表示できます。Scipynumpy

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

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

問題は、50000*5000 のマトリックスがあることです。使用するscipy.linalg.pinvと、20GB 以上のメモリが必要になります。しかし、私が使用するnumpy.linalg.pinvと、1GB未満のメモリしか使用されません..

なぜnumpyscipy両方のpinv実装が異なるのか疑問に思っていました。そして、なぜ彼らのパフォーマンスはこれほど異なるのか。

4

1 に答える 1

17

scipy と numpy の両方に実装がある理由については言えませんが、動作が異なる理由は説明できます。

numpy.linalg.pinvdgesddは、SVD (正確には lapack 法) を使用して Moore-Penrose 疑似逆行列を近似しscipy.linalg.pinvますが、モデル線形システムを最小二乗法で解いて疑似逆行列を近似します ( を使用dgelss)。これが、彼らのパフォーマンスが異なる理由です。結果の疑似逆推定の全体的な精度も多少異なると思います。

は、最小二乗近似ではなく SVD 法を使用するため、 とscipy.linalg.pinv2同様に 機能することがわかる場合があります。numpy.linalg.pinv

于 2012-11-07T08:39:15.840 に答える