Numpy linalg.qr(): Пример использования
Функция np.linalg.qr()
вычисляет qr-факторизацию матрицы. Разложите матрицу на множители как qr, где q - ортонормировано, а r - верхнетреугольное.
Синтаксис
numpy.linalg.qr(matrix, mode)
Параметры
Функция linalg.qr()
принимает два основных параметра:
matrix: это матрица размера MxN, qr факторизация которой должна быть найдена.
Mode: Всего существует 4 типа режима, а именно:
- reduced
- complete
- r
- raw
Если K = min (M, N), то
- 'reduced': возвращает q, r с размерами (M, K), (K, N) (по умолчанию)
- 'complete': возвращает q, r с размерами (M, M), (M, N)
- 'r': возвращает r только с размерами (K, N)
- 'raw': возвращает h, tau с размерами (N, M), (K,)
Опции reduced, complete и raw появились только в numpy 1.8. По умолчанию используется reduced, и для сохранения обратной совместимости с более ранними версиями numpy, как его, так и старое значение по умолчанию «full» можно опустить.
Обратите внимание, что массив h, возвращенный в режиме raw, транспонируется для вызова Фортрана.
economic режим не рекомендуется.
Режимы full и economic могут передаваться с использованием только первой буквы для обратной совместимости, но все остальные должны быть прописаны.
Возвращаемое значение
Функция qr() возвращает матрицу ndarray
, float
или сложный тип.
Эта функция также возвращает матрицу ортонормированного типа, когда mode = complete, результатом является ортогональная / унитарная матрица в зависимости от того, является ли действительным / комплексным. В этом случае определитель может быть +/- 1.
Программа для демонстрации работы qr(), когда q ортонормировано.
import numpy as np
# Declaring the first array
arr1 = np.array([[0, 1], [1, 1], [1, 1], [2, 1]])
print("Original array is :\n", arr1)
b = np.array([1, 0, 2, 1])
# Calculating qr
(q, r) = np.linalg.qr(arr1)
print("Value of q :", q)
print("Value of r :", r)
# Validating
p = np.dot(q.T, b)
print(np.dot(np.linalg.inv(r), p))
Результат
Original array is :
[[0 1]
[1 1]
[1 1]
[2 1]]
Value of q : [[ 0. 0.8660254 ]
[-0.40824829 0.28867513]
[-0.40824829 0.28867513]
[-0.81649658 -0.28867513]]
Value of r : [[-2.44948974 -1.63299316]
[ 0. 1.15470054]]
[6.66133815e-16 1.00000000e+00]
Объяснение
В этом примере мы объявили 2D-массив, значение qr которого найдено, и проверили его.
Согласно правилу, если A = qr такое, что q ортонормировано (что всегда возможно по Граму-Шмидту), то x = inv (r) * (qT) * b.
Мы, согласно правилу, также объявили один массив «b», и для проверки мы следовали данному уравнению.