numpy.linalg.qr
-
numpy.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’ для mode были добавлены в 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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.linalg.qr.html