【问题标题】:The difference of pseudo-inverse between SciPy and NumpySciPy和Numpy伪逆的区别
【发布时间】:2012-10-27 05:57:13
【问题描述】:

发现pinv()函数有两个版本,分别计算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。以及为什么他们的表现如此不同。

【问题讨论】:

    标签: matrix numpy scipy


    【解决方案1】:

    我无法解释为什么 scipy 和 numpy 都有实现,但我可以解释为什么行为不同。

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

    您可能会发现 scipy.linalg.pinv2 的性能与 numpy.linalg.pinv 更相似,因为它也使用 SVD 方法,而不是最小平方近似。

    【讨论】:

    • “更好”是一个非常主观的术语。只有你知道你首先需要伪逆。大概你也有关于你的算法的性能和数值稳定性的标准。哪个“更好”就是最符合您的标准的那个。
    猜你喜欢
    • 2020-03-28
    • 2020-10-23
    • 2011-01-16
    • 2015-08-05
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多