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方法,而不是至少平方近似.