本文介绍了numpy.linalg.lstsq 和 scipy.linalg.lstsq 有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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.lstsqscipy.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 例程 xGELSDscipy.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.

LAPACK 手册秒.2.4 状态

子程序 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 有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-11 17:19