问题描述
lstsq
尝试求解 Ax=b
最小化 |b - Ax|
.scipy 和 numpy 都提供了一个具有非常相似界面的 linalg.lstsq
函数.文档没有提到使用哪种算法,也没有提到 scipy.linalg.lstsq 也不适用于 numpy.linalg.lstsq,但它似乎做的差不多.
lstsq
tries to solve Ax=b
minimizing |b - Ax|
. Both scipy and numpy provide a linalg.lstsq
function with a very similar interface. The documentation does not mention which kind of algorithm is used, neither for scipy.linalg.lstsq nor for numpy.linalg.lstsq, but it seems to do pretty much the same.
scipy.linalg.lsts的实现似乎有所不同.> 和 numpy.linalg.lstsq.两者似乎都使用 LAPACK,两种算法似乎都使用 SVD.
The implementation seems to be different for scipy.linalg.lstsq and numpy.linalg.lstsq. Both seem to use LAPACK, both algorithms seem to use a SVD.
区别在哪里?我应该使用哪一种?
Where is the difference? Which one should I use?
注意:不要将 linalg.lstsq
与 scipy.optimize.leastsq
混淆,后者也可以解决非线性优化问题.>
Note: do not confuse linalg.lstsq
with scipy.optimize.leastsq
which can solve also non-linear optimization problems.
推荐答案
如果我读对了源代码 (Numpy 1.8.2, Scipy 0.14.1),numpy.linalg.lstsq()
使用 LAPACK 例程 xGELSD
和 scipy.linalg.lstsq()
使用xGELSS代码>.
If I read the source code right (Numpy 1.8.2, Scipy 0.14.1), numpy.linalg.lstsq()
uses the LAPACK routine xGELSD
and scipy.linalg.lstsq()
usesxGELSS
.
子程序 xGELSD 比其旧版本的 xGELSS 快得多,尤其是对于大型问题,但可能需要更多的工作空间,具体取决于矩阵维度.
这意味着 Numpy 速度更快但使用更多内存.
That means that Numpy is faster but uses more memory.
2017 年 8 月更新:
Scipy 现在默认使用 xGELSD https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.lstsq.html
Scipy now uses xGELSD by default https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.lstsq.html
这篇关于numpy.linalg.lstsq 和 scipy.linalg.lstsq 有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!