qr_multiply#
- scipy.linalg.qr_multiply(a, c, mode='right', выбор ведущего элемента=False, сопряженный=False, overwrite_a=False, overwrite_c=False)[источник]#
Вычислить QR-разложение и умножить Q на матрицу.
Вычислить разложение
A = Q Rгде Q унитарная/ортогональная, а R верхняя треугольная. Умножьте Q на вектор или матрицу c.Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.
- Параметры:
- a(M, N), array_like
Входной массив
- carray_like
Входной массив для умножения на
q.- mode{‘left’, ‘right’}, необязательно
Q @ cвозвращается, если mode равен 'left',c @ Qвозвращается, если режим 'right'. Форма c должна быть подходящей для матричных умножений, если режим 'left',min(a.shape) == c.shape[0], если режим ‘right’,a.shape[0] == c.shape[1].- выбор ведущего элементаbool, необязательно
Должна ли факторизация включать выбор главного элемента для QR-разложения, выявляющего ранг, см. документацию qr.
- сопряженныйbool, необязательно
Следует ли применять комплексное сопряжение к Q. Это может быть быстрее явного сопряжения.
- overwrite_abool, необязательно
Перезаписываются ли данные в a (может улучшить производительность)
- overwrite_cbool, необязательно
Перезаписываются ли данные в c (может улучшить производительность). Если используется, c должен быть достаточно большим для сохранения результата, т.е.
c.shape[0]=a.shape[0]если режим 'left'.
- Возвращает:
- CQndarray
Произведение
Qиc.- R(K, N), ndarray
Массив R результирующего QR-разложения, где
K = min(M, N).- P(N,) ndarray
Целочисленный массив сводок. Возвращается только когда
pivoting=True.
- Вызывает:
- LinAlgError
Возникает, если не удаётся QR-разложение.
Примечания
Это интерфейс к процедурам LAPACK
?GEQRF,?ORMQR,?UNMQR, и?GEQP3.Добавлено в версии 0.11.0.
Примеры
>>> import numpy as np >>> from scipy.linalg import qr_multiply, qr >>> A = np.array([[1, 3, 3], [2, 3, 2], [2, 3, 3], [1, 3, 2]]) >>> qc, r1, piv1 = qr_multiply(A, 2*np.eye(4), pivoting=1) >>> qc array([[-1., 1., -1.], [-1., -1., 1.], [-1., -1., -1.], [-1., 1., 1.]]) >>> r1 array([[-6., -3., -5. ], [ 0., -1., -1.11022302e-16], [ 0., 0., -1. ]]) >>> piv1 array([1, 0, 2], dtype=int32) >>> q2, r2, piv2 = qr(A, mode='economic', pivoting=1) >>> np.allclose(2*q2 - qc, np.zeros((4, 3))) True