scipy.linalg.

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