qr#
- scipy.linalg.qr(a, overwrite_a=False, lwork=None, mode='full', выбор ведущего элемента=False, check_finite=True)[источник]#
Вычислить QR-разложение матрицы.
Вычислить разложение
A = Q Rгде Q унитарна/ортогональна, а R верхнетреугольная.Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.
- Параметры:
- a(M, N) array_like
Матрица для разложения
- overwrite_abool, необязательно
Являются ли данные в a перезаписывается (может улучшить производительность, если overwrite_a устанавливается в True путем повторного использования существующей структуры входных данных вместо создания новой.)
- lworkint, необязательный
Размер рабочего массива, lwork >= a.shape[1]. Если None или -1, оптимальный размер вычисляется автоматически.
- mode{'full', 'r', 'economic', 'raw'}, опционально
Определяет, какая информация должна быть возвращена: либо и Q, и R ('full', по умолчанию), только R ('r') или и Q, и R, но вычисленные в экономичном размере ('economic', см. Примечания). Последний вариант 'raw' (добавлен в SciPy 0.11) заставляет функцию возвращать две матрицы (Q, TAU) во внутреннем формате, используемом LAPACK.
- выбор ведущего элементаbool, необязательно
Должно ли разложение включать выбор главного элемента для QR-разложения, выявляющего ранг. Если выбор главного элемента включен, вычислить разложение
A[:, P] = Q @ Rкак и выше, но где P выбирается так, чтобы диагональ R была невозрастающей. Эквивалентно, хотя и менее эффективно, явная матрица P может быть сформирована путём перестановки строк или столбцов (в зависимости от стороны уравнения, на которой она используется) единичной матрицы. См. Примеры.- check_finitebool, необязательно
Проверять ли, что входная матрица содержит только конечные числа. Отключение может повысить производительность, но может привести к проблемам (сбоям, незавершению) если входные данные содержат бесконечности или NaN.
- Возвращает:
- Qfloat или complex ndarray
Формы (M, M), или (M, K) для
mode='economic'. Не возвращается, еслиmode='r'. Заменено на кортеж(Q, TAU)ifmode='raw'.- Rfloat или complex ndarray
Формы (M, N) или (K, N) для
mode in ['economic', 'raw'].K = min(M, N).- Pint ndarray
Формы (N,) для
pivoting=True. Не возвращается, еслиpivoting=False.
- Вызывает:
- LinAlgError
Возникает при неудачном разложении
Примечания
Это интерфейс к подпрограммам LAPACK dgeqrf, zgeqrf, dorgqr, zungqr, dgeqp3 и zgeqp3.
Если
mode=economic, формы Q и R равны (M, K) и (K, N) вместо (M,M) и (M,N), сK=min(M,N).Примеры
>>> import numpy as np >>> from scipy import linalg >>> rng = np.random.default_rng() >>> a = rng.standard_normal((9, 6))
>>> q, r = linalg.qr(a) >>> np.allclose(a, np.dot(q, r)) True >>> q.shape, r.shape ((9, 9), (9, 6))
>>> r2 = linalg.qr(a, mode='r') >>> np.allclose(r, r2) True
>>> q3, r3 = linalg.qr(a, mode='economic') >>> q3.shape, r3.shape ((9, 6), (6, 6))
>>> q4, r4, p4 = linalg.qr(a, pivoting=True) >>> d = np.abs(np.diag(r4)) >>> np.all(d[1:] <= d[:-1]) True >>> np.allclose(a[:, p4], np.dot(q4, r4)) True >>> P = np.eye(p4.size)[p4] >>> np.allclose(a, np.dot(q4, r4) @ P) True >>> np.allclose(a @ P.T, np.dot(q4, r4)) True >>> q4.shape, r4.shape, p4.shape ((9, 9), (9, 6), (6,))
>>> q5, r5, p5 = linalg.qr(a, mode='economic', pivoting=True) >>> q5.shape, r5.shape, p5.shape ((9, 6), (6, 6), (6,)) >>> P = np.eye(6)[:, p5] >>> np.allclose(a @ P, np.dot(q5, r5)) True