Spec-Zone.ru › NumPy 2.0

numpy.linalg.qr

linalg.qr(a, mode='reduced')[source]

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

Разложить матрицу a как qr, где q является ортогональной и r является верхнетреугольной.

Параметры:
aarray_like, форма (…, M, N)

Объект-последовательность с размерностью не менее 2.

mode{‘reduced’, ‘complete’, ‘r’, ‘raw’}, необязательно, по умолчанию: ‘reduced’

Если 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’, транспонирован для вызова Fortran. Режим ‘economic’ устарел. Режимы ‘full’ и ‘economic’ могут быть переданы, используя только первую букву для обратной совместимости, но все остальные должны быть написаны полностью. См. примечания для получения дополнительной информации.

Возвращает:
При mode ‘reduced’ или ‘complete’, результат будет именованной кортежем с
атрибутами Q и R.
Qndarray с плавающей точкой или комплексными числами, необязательно

Матрица с ортогональными столбцами. При mode = ‘complete’ результат представляет собой ортогональную/унитарную матрицу в зависимости от того, является ли a вещественной/комплексной. Определитель в этом случае может быть либо +/- 1. В случае, если размерность входного массива больше 2, возвращается стек матриц с вышеуказанными свойствами.

Rndarray с плавающей точкой или комплексными числами, необязательно

Верхнетреугольная матрица или стек верхнетреугольных матриц, если размерность входного массива больше 2.

(h, tau)ndarrays типа np.double или np.cdouble, необязательно

Массив h содержит отражатели Хаусхолдера, которые генерируют q вместе с r. Массив tau содержит масштабирующие множители для отражателей. В устаревшем режиме ‘economic’ возвращается только h.

Исключения:
LinAlgError

Если разложение невозможно.

См. также

scipy.linalg.qr

Аналогичная функция в SciPy.

scipy.linalg.rq

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

Примечания

Это интерфейс к функциям LAPACK dgeqrf, zgeqrf, dorgqr, и zungqr.

Дополнительную информацию о QR-разложении можно найти, например, здесь: https://en.wikipedia.org/wiki/QR_factorization

Подклассы ndarray сохраняются, за исключением режима ‘raw’. Таким образом, если a имеет тип matrix, все возвращаемые значения также будут матрицами.

Новые опции ‘reduced’, ‘complete’ и ‘raw’ для параметра mode были добавлены в NumPy 1.8.0, а старая опция ‘full’ стала псевдонимом ‘reduced’. Кроме того, опции ‘full’ и ‘economic’ были устаревшими. Поскольку ‘full’ был предыдущим значением по умолчанию, а ‘reduced’ является новым значением по умолчанию, обратная совместимость может быть сохранена, если mode по умолчанию. Опция ‘raw’ была добавлена, чтобы можно было использовать функции LAPACK, которые могут умножать массивы на q с использованием отражателей Хаусхолдера. Обратите внимание, что в этом случае возвращаемые массивы имеют тип np.double или np.cdouble, а массив h транспонируется для совместимости с FORTRAN. В настоящее время numpy не предоставляет функции, использующие возвращаемое значение ‘raw’, но некоторые из них доступны в lapack_lite и ждут необходимой работы.

Примеры

>>> a = np.random.randn(9, 6)
>>> Q, R = np.linalg.qr(a)
>>> np.allclose(a, np.dot(Q, R))  # a does equal QR
True
>>> R2 = np.linalg.qr(a, mode='r')
>>> np.allclose(R, R2)  # mode='r' returns the same R as mode='full'
True
>>> a = np.random.normal(size=(3, 2, 2)) # Stack of 2 x 2 matrices as input
>>> Q, R = np.linalg.qr(a)
>>> Q.shape
(3, 2, 2)
>>> R.shape
(3, 2, 2)
>>> np.allclose(a, np.matmul(Q, R))
True

Пример, иллюстрирующий общее использование qr: решение задач наименьших квадратов

Какие наименьшие-квадраты-лучшие m и y0 в y = y0 + mx для следующих данных: {(0,1), (1,0), (1,2), (2,1)}. (Постройте точки, и вы увидите, что это должно быть y0 = 0, m = 1.) Ответ получается путем решения переопределённого матричного уравнения Ax = b, где:

A = array([[0, 1], [1, 1], [1, 1], [2, 1]])
x = array([[y0], [m]])
b = array([[1], [0], [2], [1]])

Если A = QR, такое что Q ортогонально (что всегда возможно с помощью метода Грама-Шмидта), то x = inv(R) * (Q.T) * b. (Однако на практике в numpy мы просто используем lstsq.)

>>> A = np.array([[0, 1], [1, 1], [1, 1], [2, 1]])
>>> A
array([[0, 1],
       [1, 1],
       [1, 1],
       [2, 1]])
>>> b = np.array([1, 2, 2, 3])
>>> Q, R = np.linalg.qr(A)
>>> p = np.dot(Q.T, b)
>>> np.dot(np.linalg.inv(R), p)
array([  1.,   1.])

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.linalg.qr.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API