Функция Python numpy linalg qr() используется для вычисления qr-факторизации данной матрицы.
Что такое функция Numpy linalg qr()?
Функция np qr() вычисляет qr-факторизацию матрицы. Разложите матрицу как qr, где q ортонормировано, а r является верхнетреугольным.
Синтаксис
|
1 |
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, тау с размерами(N, M),(K,)
Параметры «reduced», «complete» и «raw» являются новыми в numpy 1.8; см. примечания для получения дополнительной информации. По умолчанию используется «reduced», и для обеспечения обратной совместимости с более ранними версиями numpy как его, так и старый «full» по умолчанию можно опустить. Обратите внимание, что массив h, возвращаемый в «raw» режиме, транспонируется для вызова Fortran.
«economic» режим устарел.
Режимы «full» и «economic» можно передавать, используя только первую букву для обратной совместимости, но все остальные должны быть прописаны.
Возвращаемое значение
Функция np qr() возвращает матрицу ndarray, тип float или комплексный.
Эта функция также возвращает матрицу ортонормированного типа, когда mode = «complete», результатом является ортогональная/унитарная матрица в зависимости от того, является ли a действительным/комплексным. В этом случае определитель может быть либо +/- 1.

Программа с qr(), когда q ортонормирован
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Program to show working of qr() when q is orthonormal 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)) |
Вывод:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
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] |
Объяснение.
В этом примере мы объявили двумерный массив, значение «qr» которого найдено, и проверили его. Согласно правилу, если A = qr такое, что q ортонормировано (что всегда возможно по Граму-Шмидту), то x = inv(r) *(qT) * b.
Мы, согласно правилу, также объявили один массив «b», и для проверки следовали заданному уравнению.


