Spec-Zone.ru › NumPy 1.15

numpy.linalg.qr

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

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

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

Параметры:
a : array_like, shape (M, N)

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

mode : {‘reduced’, ‘complete’, ‘r’, ‘raw’, ‘full’, ‘economic’}, 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,)
  • ‘full’ : псевдоним ‘reduced’, устаревший
  • ‘economic’ : возвращает h из ‘raw’, устаревший.

Варианты ‘reduced’, ‘complete’ и ‘raw’ новые в numpy 1.8, см. примечания для получения дополнительной информации. По умолчанию используется ‘reduced’, а для обеспечения обратной совместимости с более ранними версиями numpy можно опустить как его, так и старый вариант по умолчанию ‘full’. Обратите внимание, что массив h, возвращаемый в режиме ‘raw’, транспонируется для вызова Fortran. Режим ‘economic’ устарел. Режимы ‘full’ и ‘economic’ могут передаваться с использованием только первой буквы для обратной совместимости, но все остальные должны быть написаны полностью. См. Примечания для получения более подробного объяснения.

Возвращаемые значения:
q : ndarray of float or complex, optional

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

r : ndarray of float or complex, optional

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

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

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

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

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

Примечания

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

Для получения дополнительной информации о QR-разложении см., например: http://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')
>>> r3 = np.linalg.qr(a, mode='economic')
>>> np.allclose(r, r2)  # mode='r' returns the same r as mode='full'
True
>>> # But only triu parts are guaranteed equal when mode='economic'
>>> np.allclose(r, np.triu(r3[:6,:6], k=0))
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 = LA.qr(A)
>>> p = np.dot(q.T, b)
>>> np.dot(LA.inv(r), p)
array([  1.1e-16,   1.0e+00])

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

Spec-Zone.ru

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