scipy.linalg.

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) if mode='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