http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.linalg.orth.html
И как мне его настроить? Я получаю меньше основы, чем ожидалось. Google не дает мне явно полезного результата на первых нескольких страницах.
http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.linalg.orth.html
И как мне его настроить? Я получаю меньше основы, чем ожидалось. Google не дает мне явно полезного результата на первых нескольких страницах.
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
в качестве отправной точки для написания собственной функции.