scipy.linalg.

rq#

scipy.linalg.rq(a, overwrite_a=False, lwork=None, mode='full', check_finite=True)[источник]#

Вычислите RQ-разложение матрицы.

Вычислить разложение A = R Q где Q унитарна/ортогональна, а R верхнетреугольная.

Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.

Параметры:
a(M, N) array_like

Матрица для разложения

overwrite_abool, необязательно

Перезаписываются ли данные в a (может улучшить производительность)

lworkint, необязательный

Размер рабочего массива, lwork >= a.shape[1]. Если None или -1, оптимальный размер вычисляется автоматически.

mode{‘full’, ‘r’, ‘economic’}, опционально

Определяет, какая информация должна быть возвращена: либо и Q, и R ('full', по умолчанию), только R ('r') или и Q, и R, но вычисленные в экономичном размере ('economic', см. Примечания).

check_finitebool, необязательно

Проверять ли, что входная матрица содержит только конечные числа. Отключение может повысить производительность, но может привести к проблемам (сбоям, незавершению) если входные данные содержат бесконечности или NaN.

Возвращает:
Rfloat или complex ndarray

Формы (M, N) или (M, K) для mode='economic'. K = min(M, N).

Qfloat или complex ndarray

Формы (N, N) или (K, N) для mode='economic'. Не возвращается, если mode='r'.

Вызывает:
LinAlgError

Если разложение не удалось.

Примечания

Это интерфейс к подпрограммам LAPACK sgerqf, dgerqf, cgerqf, zgerqf, sorgrq, dorgrq, cungrq и zungrq.

Если mode=economic, формы Q и R равны (K, N) и (M, K) вместо (N,N) и (M,N), с K=min(M,N).

Примеры

>>> import numpy as np
>>> from scipy import linalg
>>> rng = np.random.default_rng()
>>> a = rng.standard_normal((6, 9))
>>> r, q = linalg.rq(a)
>>> np.allclose(a, r @ q)
True
>>> r.shape, q.shape
((6, 9), (9, 9))
>>> r2 = linalg.rq(a, mode='r')
>>> np.allclose(r, r2)
True
>>> r3, q3 = linalg.rq(a, mode='economic')
>>> r3.shape, q3.shape
((6, 6), (6, 9))