Spec-Zone.ru › NumPy 1.16

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

Матрица с ортогональными столбцами. В режиме ‘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-разложении см., например: https://ru.wikipedia.org/wiki/QR-разложение

Подклассы 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.16.1/reference/generated/numpy.linalg.qr.html

Spec-Zone.ru

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