Что такое автоматическое отключение в scipy.linalg.orth()?

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

И как мне его настроить? Я получаю меньше основы, чем ожидалось. Google не дает мне явно полезного результата на первых нескольких страницах.


person Chromatic    schedule 11.06.2016    source источник


Ответы (1)


orth использует разложение по единственному значению. Определение orth в настоящее время находится в 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 – это относительный допуск: он устанавливается равным max(M, N)*eps, умноженному на максимальное единичное значение A, где eps – эпсилон машины с плавающей запятой.

orth не предоставляет аргументов для управления вычислением tol, но, как видите, функция состоит всего из нескольких строк. Если вы хотите использовать другой метод для определения того, какие единичные значения следует игнорировать, вы можете использовать orth в качестве отправной точки для написания собственной функции.

person Warren Weckesser    schedule 11.06.2016