SciPy和Numpy之间的伪逆差异

Han*_*Sun 10 numpy matrix scipy

我发现有两个版本的pinv()函数,它计算矩阵的伪逆,Scipy并且numpy可以在以下位置查看文档:

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的内存.

我想知道为什么numpy,scipy两者都有pinv不同的实施方式.为什么他们的表现如此不同.

tal*_*ies 12

我不能说为什么scipy和numpy都有实现,但我可以解释为什么行为不同.

numpy.linalg.pinv使用SVD(dgesdd精确的lapack方法)近似Moore-Penrose伪逆,而scipy.linalg.pinv在最小二乘意义上求解模型线性系统以逼近伪逆(使用dgelss).这就是他们的表现不同的原因.我预计得到的伪逆估计的总体准确性也会有所不同.

你可能会发现它的scipy.linalg.pinv2表现更相似 numpy.linalg.pinv,因为它也使用SVD方法,而不是至少平方近似.