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’ для параметра mode были добавлены в Numpy 1.8, а старый вариант ‘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])
© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.linalg.qr.html