Spec-Zone.ru › NumPy 1.14

numpy.linalg.qr

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

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

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

Параметры:

a : array_like, форма (M, N)

Матрица для разложения.

mode : {‘reduced’, ‘complete’, ‘r’, ‘raw’, ‘full’, ‘economic’}, необязательно

Если 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 с плавающей точкой или комплексными числами, необязательно

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

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

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

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

Массив 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.14.5/reference/generated/numpy.linalg.qr.html

Spec-Zone.ru

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