scipy.linalg.orth() 中的 "automatic cutoff" 是什么?

What is the "automatic cutoff" in scipy.linalg.orth()?

http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.linalg.orth.html

我该如何调整它? 我得到的基础比预期的要少。 Google 在前几页没有给我明显有用的结果。

orth uses the singular value decomposition. The definition of orth currently lives in https://github.com/scipy/scipy/blob/master/scipy/linalg/decomp_svd.py,在我写这篇文章时,orth(删除文档字符串)的完整代码是:

def orth(A):
    u, s, vh = svd(A, full_matrices=False)
    M, N = A.shape
    eps = numpy.finfo(float).eps
    tol = max(M, N) * numpy.amax(s) * eps
    num = numpy.sum(s > tol, dtype=int)
    Q = u[:, :num]
    return Q

结果是小于tol的奇异值被认为是0,那些方向不被认为是A范围的一部分。 tol 是一个 relative 公差:它被设置为 max(M, N)*eps 乘以 A 的最大奇异值,其中 eps 是浮动点机epsilon.

orth 没有提供参数来控制 tol 的计算方式,但正如您所见,该函数只有几行。如果您想使用不同的方法来决定忽略哪些奇异值,您可以使用 orth 作为编写您自己的函数的起点。