Spec-Zone.ru › NumPy 1.20

numpy.linalg.qr

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

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

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

Параметры
aarray_like, shape (M, N)

Матрица, подлежащая разложению.

mode{‘reduced’, ‘complete’, ‘r’, ‘raw’}, optional

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

Возвращает
qndarray of float or complex, optional

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

rndarray of float or complex, optional

Верхнетреугольная матрица.

(h, tau)ndarrays of np.double or np.cdouble, optional

Массив 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’ для режима были добавлены в 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

Пример, иллюстрирующий общее использование 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, 0, 2, 1])
>>> q, r = np.linalg.qr(A)
>>> p = np.dot(q.T, b)
>>> np.dot(np.linalg.inv(r), p)
array([  1.1e-16,   1.0e+00])

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

Spec-Zone.ru

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